如何解决如何在Java的Lambda函数内部的父类中调用方法?
我试图编写以下代码,但是错误发生在第return super.getAge("Jack");
行
它显示了“类型为Object的方法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;
}
}
解决方法
尝试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");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。