Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何在Lambda函数内部的父类中调用方法?_Java_Extends_Super_Callable - Fatal编程技术网

在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"));