Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何解释方法比较的参数(函数<;?super T,?扩展U>;keyExtractor)?_Java_Generics_Lambda_Java 8_Generic Constraints - Fatal编程技术网

Java 我如何解释方法比较的参数(函数<;?super T,?扩展U>;keyExtractor)?

Java 我如何解释方法比较的参数(函数<;?super T,?扩展U>;keyExtractor)?,java,generics,lambda,java-8,generic-constraints,Java,Generics,Lambda,Java 8,Generic Constraints,方法的完整签名: public static <T, U extends Comparable<? super U>> Comparator<T> comparing( Function<? super T, ? extends U> keyExtractor) 公共静态 我如何知道参数接受lambda expersion 通过查看它接受的参数的接口。在本例中,参数类型为Function,这是一个函数接口(此名称与接口名

方法的完整签名:

public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
            Function<? super T, ? extends U> keyExtractor)

公共静态
我如何知道参数接受lambda expersion

通过查看它接受的参数的
接口
。在本例中,参数类型为
Function
,这是一个函数接口(此名称与接口名称没有任何连接-您可以根据需要命名接口)。功能接口是一个
接口
,它只有一个未实现的功能(另一个区别是
接口
s可以有
默认
实现)

查看
函数

@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);

    default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    }

    default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }

    static <T> Function<T, T> identity() {
        return t -> t;
    }
}
@functioninterface
公共接口功能{
R应用(T);

默认函数组合(函数方法的完整签名:


公共静态你是说“功能”从参数中告诉我们正在接收一个函数intreface?以及限制条件如何:是的,但请记住,
函数
是一个函数接口,不是因为它被命名为函数,而是因为一个名为
函数
接口
只有一个方法不是
默认
编辑的。它是cal发光二极管<代码>应用()
lambda用于以内联方式实现该方法。好的,如果我有“函数”一词,它表示函数接口,不管它是什么函数接口。是的,我知道什么是函数接口,我知道注释是为了明确目的,但像初学者一样,我想学习如何阅读参数。我知道这一点super意味着?在层次继承中必须是类型T或更高,在层次继承中也必须是类型U或更低。但在我的示例中,我们如何进行转换?可以这样解释:?在继承链中必须是类型Employees或更高,在继承链中名称字段必须是类型Employees或更低ce chain?
与一般类型(如
T
)不同,这并不意味着两种类型的功能都必须位于
Employee
的层次结构中。简单地说,它们是两种不同类型的
T
U
,其中
T
Employee
bas相关因为它被调用在一个
列表中,所以我对方法类型推断的类型进行了详细的介绍。它是一个T和U类型的通配符,T和U是一些需要约束的对象类型,就像在方法签名中一样,不是吗?但是我想知道如何解释这个签名,这样我就知道如何使用它以及为什么使用它,而不是通过hart学习。
comparing(Function<? super T,? extends U> keyExtractor)
@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);

    default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    }

    default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }

    static <T> Function<T, T> identity() {
        return t -> t;
    }
}