java – 泛型类型实例化和Lambdas
发布时间:2020-12-15 08:26:34 所属栏目:Java 来源:网络整理
导读:我正在使用匿名函数和函数接口,我有一个功能接口,它接受两个相同类型的对象并返回true或false. package elementutils;@FunctionalInterfacepublic interface TwoElementPredicate T { public boolean compare(T a,T b); } 我使用另一个类中的函数接口来获取
我正在使用匿名函数和函数接口,我有一个功能接口,它接受两个相同类型的对象并返回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,b) -> a > b); //double z= ElementUtils.betterElement(2.5,3.7,b) -> a > b); // all this give errors } } 这些函数应该使用任何对象,只要它们来自同一类型.我以为我可以使用泛型类来实现它,但是当我实例化lambdas时,似乎元素总是类型为object,所以我不能使用length()并且不能将它们分配给String例如. 我希望我能正确解释,任何帮助都将受到高度赞赏. 解决方法
您缺少TwoElementPredicate上的类型参数T,因此您使用的是原始类型
您需要声明类型为TwoElementPredicate< T>的参数元素. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |