[英]How to call a method in parent class inside of Lambda function in Java?
我试图编写以下代码段,但错误发生在行return super.getAge("Jack");
它显示“该方法 getAge() 未定义对象类型” 。 我猜这里没有确定“超级”关键字。 有没有人对如何解决此错误有任何建议? 非常感谢!
public class Parent {
public int getAge(String name) {
System.out.println("Get the age of the parent.");
return 40;
}
}
public class Child extends Parent {
@Override
public int getAge(String name) {
Future<Integer> ageFuture = null;
@Qualifier("XXX")
private ExecutorService executorService;
try {
ageFuture = executorService.submit(new Callable<Integer>() {
public int call() throws Exception {
return super.getAge("Jack");
}
});
} catch (Exception e) {
logger.error(" ", e);
}
return 10;
}
}
尝试Parent.super.getAge("jack")
,虽然我认为这行不通。
如果没有,那么您唯一的选择是制作桥接方法:
public class Child extends Parent {
private int superGetAge(String name) {
return super.getAge(name);
}
@Override
public int getAge(String name) {
.... return superGetAge("jack");
}
}
因为您正在使用new Callable()
来实例化一个新类,所以super.getAge("jack")
指的是一个不存在的方法。
而是切换到可以直接引用super.getAge("Jack")
lambda 定义:
Callable<Integer> call = () -> super.getAge("Jack");
try {
ageFuture = executorService.submit(call);
}
// etc...
或更短:
ageFuture = executorService.submit(() -> super.getAge("Jack"));
您正在使用“new Callable {...}”即时定义一个新类
该类继承自 Object。
您可以尝试将 Parent getAge() 定义为静态方法并使用
Parent.getAge("Jack");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.