在Java中,如何在Lambda函数内部的父类中调用方法?
我试图编写以下代码,但错误发生在第在Java中,如何在Lambda函数内部的父类中调用方法?,java,extends,super,callable,Java,Extends,Super,Callable,我试图编写以下代码,但错误发生在第returnsuper.getAge(“Jack”)行 它显示“类型对象的getAge()方法未定义”。我猜这里没有识别“super”关键字。 有人对如何修复此错误有任何建议吗?非常感谢 public class Parent { public int getAge(String name) { System.out.println("Get the age of the parent."); return
returnsuper.getAge(“Jack”)行代码>
它显示“类型对象的getAge()方法未定义”。我猜这里没有识别“super”关键字。
有人对如何修复此错误有任何建议吗?非常感谢
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;
}
}
公共类父类{
public int getAge(字符串名称){
System.out.println(“获取父母的年龄”);
返回40;
}
}
公共类子级扩展父级{
@凌驾
public int getAge(字符串名称){
Future-ageFuture=null;
@限定词(“XXX”)
私人遗嘱执行人服务;
试一试{
ageFuture=executorService.submit(新的可调用(){
public int call()引发异常{
返回super.getAge(“杰克”);
}
});
}捕获(例外e){
记录器错误(“,e);
}
返回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");
}
}
您正在使用“newcallable{…}”动态定义一个新类
该类是从对象继承的
您可以尝试将父getAge()定义为静态方法,并使用
Parent.getAge("Jack");
因为您使用的是实例化一个新类的newcallable()
,所以super.getAge(“jack”)
指的是一个不存在的方法
改为切换到lambda定义,它可以直接引用super.getAge(“Jack”)
:
Callable<Integer> call = () -> super.getAge("Jack");
try {
ageFuture = executorService.submit(call);
}
// etc...
非常感谢,第二种方法很简单,但是很聪明!“Parent.super.getAge(“jack”)”不起作用。如果仔细观察,您将不会在这个答案中看到对super的引用。
ageFuture = executorService.submit(() -> super.getAge("Jack"));