java – Lambda只能用于功能接口吗?
作者:互联网
我这样做了:
public class LambdaConflict
{
public static void main(String args[]){
//*
System.out.println(LambdaConflict.get(
(str) -> "Hello World!! By ME?"
));
/*/
System.out.println(LambdaConflict.get(new Intf<String> (){
@Override public String get1(String str){
return "Hello World!! By get1 " + str;
}
}));
/*****/
}
public static String get(Intf<String> i, boolean b){
return i.get1("from 1");
}
}
interface Intf<T>
{
public T get1(T arg1);
public T get2(T arg1);
}
并获得此异常:
incompatible types: Intf is not a functional interface
multiple non-overriding abstract methods found in interface Intf
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get
full output
1 error
是否有任何条件我不能使用lambda来替换匿名类?
解决方法:
不,没有办法“克服”这一点.功能接口必须只有一个抽象方法.你的界面有两个:
interface Intf<T> {
public T get1(T arg1);
public T get2(T arg1);
}
注意:您不需要像注释中提到的那样注释您的界面.但是,如果您的接口不是有效的功能接口,则可以使用@FunctionalInterface批注来获取编译时错误.因此,它为您的代码带来了更多安全性.
有关详情,请参阅http://java.dzone.com/articles/introduction-functional-1
标签:functional-interface,java,java-8,lambda 来源: https://codeday.me/bug/20190930/1835672.html