什么时候使用私有接口方法而不是私有静态方法?
When to use private interface methods over private static methods?
对于Java9及以后,我理解private
接口方法可以在接口中声明和实现,然后被default
接口方法调用(同一个接口) .
但是,private
个接口方法不能被static
个接口方法调用。
现在,我也明白了,private static
接口方法可以在接口中declared/implemented,然后被default
调用,也可以被static
方法调用。
所以在我看来 private static
接口方法的能力是 private
接口方法的 'superset'。
如果是这样,是否存在使用 private
接口方法优于使用 private static
接口方法的情况?
例如:
public interface Schedule {
default void wakeUp() { checkTime(7); }
// static void sleep() { checkTime(21); } // compile error if private interface method called
private void checkTime(int time) { // if so, why not always use private static method instead?
// implementation omitted
}
}
非静态方法本身可以调用其他实例方法。
public interface Schedule {
LocalTime getCurrentTime();
default void wakeUp() { checkTime(7); }
private void checkTime(int time) {
if (getCurrentTime().isAfter(/*something*/)) {
// do something
}
}
}
如果它是静态的,它就不能那样做。如果您不需要调用另一个实例方法,请将其设为静态。
这与编写普通 class 时应遵循的逻辑几乎相同。
对于Java9及以后,我理解private
接口方法可以在接口中声明和实现,然后被default
接口方法调用(同一个接口) .
但是,private
个接口方法不能被static
个接口方法调用。
现在,我也明白了,private static
接口方法可以在接口中declared/implemented,然后被default
调用,也可以被static
方法调用。
所以在我看来 private static
接口方法的能力是 private
接口方法的 'superset'。
如果是这样,是否存在使用 private
接口方法优于使用 private static
接口方法的情况?
例如:
public interface Schedule {
default void wakeUp() { checkTime(7); }
// static void sleep() { checkTime(21); } // compile error if private interface method called
private void checkTime(int time) { // if so, why not always use private static method instead?
// implementation omitted
}
}
非静态方法本身可以调用其他实例方法。
public interface Schedule {
LocalTime getCurrentTime();
default void wakeUp() { checkTime(7); }
private void checkTime(int time) {
if (getCurrentTime().isAfter(/*something*/)) {
// do something
}
}
}
如果它是静态的,它就不能那样做。如果您不需要调用另一个实例方法,请将其设为静态。
这与编写普通 class 时应遵循的逻辑几乎相同。