我需要在接口的静态方法中调用默认方法(同一接口中的两个方法 - 一个是默认方法,另一个是静态方法)。这可能吗?如果是这样,我怎么能实现这个目标呢?
查看代码部分以更好地理解我的问题:
interface A{
default void callee(){
//do something here
}
static void caller(){
//call callee() method anyhow
}
}
答案 0 :(得分:3)
您需要实例来调用非静态方法。
static void caller() {
new A(){}.callee();
}
最好避免静态到非静态调用。我想你可以将callee
的一部分提取到静态方法。
答案 1 :(得分:2)
默认方法是实现接口的所有类都将继承“default”的方法。这避免了必须为实现接口的每个类重写方法。 您只能使用实现'A'接口的类的对象实例从被调用者'A'调用默认方法。
您有两个选择:
将A对象作为参数传递给静态“调用者”方法。
interface A {
default void callee(){
//do something here
}
static void caller(A anAInstance){
anAInstance.callee();
}
}
在此方法中创建一个匿名类。
interface A {
default void callee(){
//do something here
}
static void caller(){
new A(){}.callee();
}
}
有关默认方法的详细信息,请参阅:https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html