java – 泛型类型实例化和Lambdas
作者:互联网
我正在使用匿名函数和函数接口,我有一个功能接口,它接受两个相同类型的对象并返回true或false.
package elementutils;
@FunctionalInterface
public interface TwoElementPredicate <T> {
public boolean compare(T a, T b);
}
我使用另一个类中的函数接口来获取使用匿名函数的“更好的元素”,方法betterElement接受两个对象和功能接口的实例.然后我应该能够创建lambdas来比较main中相同类型的两个对象.
package elementutils;
public class ElementUtils <T> {
public T betterElement(T a, T b, TwoElementPredicate elements){
if (elements.compare(a, b) == true) {
return a;
}else {
return b;
}
}
public static void main(String[] args) {
//String x= ElementUtils.betterElement("java", "python", (a, b) -> a.length() < b.length());
//int y= ElementUtils.betterElement(2, 3, (a, b) -> a > b);
//double z= ElementUtils.betterElement(2.5, 3.7, (a, b) -> a > b);
// all this give errors
}
}
这些函数应该使用任何对象,只要它们来自同一类型.我以为我可以使用泛型类来实现它,但是当我实例化lambdas时,似乎元素总是类型为object,所以我不能使用length()并且不能将它们分配给String例如.
我希望我能正确解释,任何帮助都将受到高度赞赏.
解决方法:
您缺少TwoElementPredicate上的类型参数T,因此您使用的是原始类型
您需要声明类型为TwoElementPredicate< T>的参数元素.
标签:functional-interface,java,functional-programming,generics,anonymous-function 来源: https://codeday.me/bug/20190731/1586959.html