【问题标题】:How to call a method in parent class inside of Lambda function in Java?java - 如何在Java中的Lambda函数内部调用父类中的方法?
【发布时间】:2021-02-22 22:39:45
【问题描述】:

我正在尝试编写以下代码,但错误发生在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;
    }
}

【问题讨论】:

    标签: java extends super callable


    【解决方案1】:

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

    【讨论】:

    • 非常感谢,第二种方法很简单但很聪明! "Parent.super.getAge("jack")" 不起作用。
    【解决方案2】:

    您正在使用“new Callable {...}”动态定义一个新类

    该类继承自 Object。

    您可以尝试将 Parent getAge() 定义为静态方法并调用它

    Parent.getAge("Jack");
    

    【讨论】:

    • 如果你仔细观察,你会发现这个答案中没有提到 super。
    【解决方案3】:

    因为您正在使用 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"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2012-02-21
      • 2013-11-02
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      相关资源
      最近更新 更多