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

nafvub8i  于 2023-06-20  发布在  Java
关注(0)|答案(3)|浏览(113)

我试图写下面的代码,但错误发生在return super.getAge("Jack");行它显示**“The method getAge()is undefined for the type 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;
    }
}
s8vozzvw

s8vozzvw1#

因为你使用的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"));
628mspwn

628mspwn2#

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

uqjltbpv3#

您正在使用“new Callable {...}”动态地定义一个新类
这个类继承自Object。
您可以尝试将ParentgetAge()定义为静态方法并使用

Parent.getAge("Jack");

相关问题