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;
}
}