当我在main方法中将接口实现为Lambda表达式时,它并不算是已实现。
我知道我可以在main方法之外实现它,但是我不明白为什么无论如何我必须在Lambda表达式之外实现它。
public class Driver implements Interface1, Interface2, Interface3 {
public static void main(String[] args) {
//Implementing Interface1
double x;
Interface1 obj = () -> 5.5;
x = obj.foo();
System.out.println(x);
//Implementing Interface2
String str;
Interface2 obj2 = (a) -> String.format("The number is %d", a);
str = obj2.foo(356);
System.out.println(str);
//Implementing Interface3
boolean tF;
Interface3 obj3 = (i, s) -> i == Integer.parseInt(s);
tF = obj3.foo(30, "30");
System.out.print(tF);
}
在这里,我在第1行收到一条错误消息,告诉我未实现接口。它仍然可以编译和运行,我只是不明白为什么收到此消息。 当前输出为:
5.5
The number is 356
true
答案 0 :(得分:1)
您要做的就是在main方法中定义局部变量,其类型恰好与 class 必须实现的接口相符。
您必须在类中定义方法,该方法为该类的所有接口提供实现。例如:
public class Driver implements Interface1, Interface2, Interface3 {
public static void main(String[] args) {
// all code in here is irrelevant to the class implementing Interface1, Interface2, Interface3
}
public void interface1Method() {
// whatever
}
public void interface2Method() {
// whatever
}
public void interface3Method() {
// whatever
}
}
请注意,您不能为此使用lambda; Driver
实际上必须从其声明正在实现的所有接口中声明缺少的方法的实现。