如何在Java中的Lambda函数内部调用父类中的方法



我试图编写以下代码,但错误发生在return super.getAge("Jack");行它显示出";方法getAge((对于Object"类型是未定义的。我想;超级";此处未标识关键字。有人对如何修复这个错误有什么建议吗?非常感谢!

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;
}
}

因为您使用的new Callable()将实例化一个匿名类作为Callable的子级,而不是Parent,所以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"));

尝试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");
}
}

您正在使用"新的可调用{…}";

该类是从Object继承的。

您可以尝试将ParentgetAge((定义为一个静态方法,并使用调用它

Parent.getAge("Jack");

相关内容

  • 没有找到相关文章

最新更新