我正在学习 Java 8 中的 Lambda 表达式和方法引用,并看到我们可以通过使用“super”来引用方法的超类版本,如下所示:
超级::名称
但是当我这样做时,它不起作用。这是示例代码:
interface MyInterface {
int someFunc(int x);
}
class A {
static int Func(int y) {
// return (int) (Math.random() * y);
return y;
}
}
class B extends A {
static int Func(int y) {
// return (int) (Math.random() * y);
return y + 1;
}
}
public class Test {
public static void main(String[] args) {
System.out.print("Enter a number: ");
java.util.Scanner scanner = new java.util.Scanner(System.in);
int result = funcOp(B::Func, scanner.nextInt()); // <-This works.
//int result = funcOp(B.super::Func, scanner.nextInt()); <--This is not working.
//Getting: error: not an enclosing class: B
int result = funcOp(B.super::Func, scanner.nextInt());
^
scanner.close();
System.out.println(result);
}
static int funcOp(MyInterface mI, int num) {
return mI.someFunc(num);
}
}
请告诉我,我执行此代码是否错误?根据我的理解,我们可以传递一个方法“X”作为参考,因为方法“X”满足方法“Y”的条件和行为,并且可能取代方法在那种情况下“Y”。
这是不对的,我是否以错误的方式获得了方法引用?
郎朗坤
一只名叫tom的猫
相关分类