繁体   English   中英

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

[英]How to call a method in parent class inside of Lambda function in Java?

我试图编写以下代码段,但错误发生在行return super.getAge("Jack"); 它显示“该方法 getAge() 未定义对象类型” 我猜这里没有确定“超级”关键字。 有没有人对如何解决此错误有任何建议? 非常感谢!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM