为什么功能接口“selectDSLCompleter”不包含任何抽象方法?

问题描述 投票:0回答:1

据我所知,Java中的函数式接口必须有一个(且只有一个)抽象方法。然而,

selectDSLCompleter
中名为
org.mybatis.dynamic.sql.select
的接口没有任何抽象方法,但仍然可以正常工作。

接口定义如下:

package org.mybatis.dynamic.sql.select;

import java.util.function.Function;
import org.mybatis.dynamic.sql.SortSpecification;
import org.mybatis.dynamic.sql.util.Buildable;

@FunctionalInterface
public interface SelectDSLCompleter extends Function<QueryExpressionDSL<SelectModel>, Buildable<SelectModel>> {
    static SelectDSLCompleter allRows(){
        return (c) -> {
            return c;
        };
    }

    static SelectDSLCompleter allRowsOrderedBy(SortSpecification... columns) {
        return (c) -> {
            return c.orderBy(columns);
        };
    }
}

并用作此示例:

映射器中定义的方法:

default List<Person> select(SelectDSLCompleter completer) {
    return MyBatis3Utils.selectList(this::selectMany, selectList, person, completer);
}

服务中调用的方法:

List<Person> allRecords = mapper.select(c -> c);

有什么我错过的吗?

我搜索了这个问题,但什么也没找到。我只是想知道它是如何工作的。

java functional-interface mybatis-dynamic-sql
1个回答
1
投票

确实包含一个抽象方法。它继承自

Function<QueryExpressionDSL<SelectModel>, Buildable<SelectModel>>

© www.soinside.com 2019 - 2024. All rights reserved.