在静态接口方法中调用默认方法

时间:2016-08-29 07:27:03

标签: java java-8

我需要在接口的静态方法中调用默认方法(同一接口中的两个方法 - 一个是默认方法,另一个是静态方法)。这可能吗?如果是这样,我怎么能实现这个目标呢?

查看代码部分以更好地理解我的问题:

interface A{
default void callee(){
        //do something here
    }

    static void caller(){
        //call callee() method anyhow
    }
}

2 个答案:

答案 0 :(得分:3)

您需要实例来调用非静态方法。

static void caller() {
    new A(){}.callee();
}

最好避免静态到非静态调用。我想你可以将callee的一部分提取到静态方法。

答案 1 :(得分:2)

默认方法是实现接口的所有类都将继承“default”的方法。这避免了必须为实现接口的每个类重写方法。 您只能使用实现'A'接口的类的对象实例从被调用者'A'调用默认方法。

您有两个选择:

  1. 将A对象作为参数传递给静态“调用者”方法。

    interface A {
        default void callee(){
            //do something here
        }
    
        static void caller(A anAInstance){
            anAInstance.callee();
        }
    }
    
  2. 在此方法中创建一个匿名类。

    interface A {
        default void callee(){
            //do something here
        }
    
        static void caller(){
            new A(){}.callee();
        }
    }
    
  3. 有关默认方法的详细信息,请参阅:https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html