java - 何时使用私有接口方法而不是私有静态方法?
问题描述
对于 Java 9 及更高版本,我理解private
可以在接口中声明和实现接口方法,然后由default
接口方法(同一个接口)调用。
但是,private
接口方法不能被static
接口方法调用。
现在,我也明白private static
接口方法可以在接口中声明/实现,然后由方法default
和static
方法调用。
所以在我看来,接口方法的能力是private static
接口方法的“超集” private
。
如果是这种情况,是否存在使用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
}
}
}
如果它是静态的,它就无法做到这一点。如果您不需要调用另一个实例方法,请将其设为静态。
这与编写普通类时应该遵循的逻辑几乎相同。
推荐阅读
- vb.net - (假设)异步查询等待结果
- c# - 如何反序列化文件中的数据并将其转换回原始对象?
- java - Java8 中的 CompletableFuture
- mysql - Azure 上 mysql 数据库中的端到端加密
- spring-boot - Undertow 将在何时使用单个 IO 线程处理所有传入请求
- php - Laravel Eager Loading:使用关系列排序
- java - 跨浏览器登录预防
- android - ConcurrentModificationException 在这里抛出 android sdk
- biztalk - BizTalk 2016 WCF-SAP 警告
- javascript - Angular6中的CKeditor“c [a]未定义”