Java 在接口的静态方法中调用默认方法
我需要在接口的静态方法中调用一个默认方法(同一接口中有两个方法,一个是默认的,另一个是静态的)。这可能吗?如果是,我怎样才能做到这一点 查看代码部分以更好地理解我的问题:Java 在接口的静态方法中调用默认方法,java,java-8,Java,Java 8,我需要在接口的静态方法中调用一个默认方法(同一接口中有两个方法,一个是默认的,另一个是静态的)。这可能吗?如果是,我怎样才能做到这一点 查看代码部分以更好地理解我的问题: interface A{ default void callee(){ //do something here } static void caller(){ //call callee() method anyhow } } 您需要实例来调用非静态方法 static
interface A{
default void callee(){
//do something here
}
static void caller(){
//call callee() method anyhow
}
}
您需要实例来调用非静态方法
static void caller() {
new A(){}.callee();
}
最好避免静态到非静态调用。我想您可以将被调用方的一部分提取到静态方法。您需要实例来调用非静态方法
static void caller() {
new A(){}.callee();
}
最好避免静态到非静态调用。我想您可以将被调用方的一部分提取到静态方法。默认方法是由实现接口的所有类继承的“默认”方法。这避免了为实现接口的每个类重写方法。
static void caller() {
new A(){}.callee();
}
只能使用实现“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();
}
}
有关默认方法的更多信息,请参见:默认方法是由实现接口的所有类继承的“默认”方法。这避免了为实现接口的每个类重写方法。 只能使用实现“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();
}
}
有关默认方法的更多信息,请参见:请显示您的代码,并说明您遇到的具体问题。当静态方法需要调用实例方法时,为什么静态方法需要是静态的。如果行为依赖于状态,那么它可能不应该是静态的。我只能想到
静态void caller(A){A.callee();}
,但我怀疑这就是您要寻找的。就我个人而言,在这种情况下,我很可能会将其作为一种实例方法。由于是void返回类型,我假设它改变了某个实例的状态。所以你需要一个实例。我觉得这可能是个x-y问题。你想做什么?请展示你的代码并说明你有什么具体问题。为什么你的静态方法在需要调用实例方法时需要是静态的。如果行为依赖于状态,那么它可能不应该是静态的。我只能想到静态void caller(A){A.callee();}
,但我怀疑这就是您要寻找的。就我个人而言,在这种情况下,我很可能会将其作为一种实例方法。由于是void返回类型,我假设它改变了某个实例的状态。所以你需要一个实例。我觉得这可能是个x-y问题。你想做什么?谢谢@Sergey Rybalkin谢谢@Sergey Rybalkin