如果您的默认实现相当琐碎并且可能保持这种方式,并且如果没有任何扩展或可能扩展它,那么这可能是要走的路。你不想把它放在自己的文件中,你还会把它放在哪里?我建议使用公共实例将类设为私有(假设没有状态):
/** An interface a lot like java.util.Collection. */
public interface WhatEver {
private class Default implements Whatever {
// Methods...
}
/** A default implementation that is always empty. Suitable as a NULL value. */
public final WhatEver DEFAULT = new Default();
// Rest of interface...
我认为这对执行没有任何影响(类实例中没有数据),但你会得到更好的 Javadoc。您可以使用匿名类并保存一行代码。
您甚至可能需要一些其他“默认”实例。对于类似集合的界面,您可能有一个具有单个默认条目或无限数量(hasNext
始终返回true
)的相同默认条目。
我认为关键是默认实现不能依赖于接口之外的任何东西。不使用外部类和接口,除非它们在接口的主体中被引用,并且不使用扩展默认值的外部类。接口变得比接口的标准概念多一点,但仍然独立存在。
另一个关键点是您不希望一个 .java 文件中有太多代码,但也不希望太少。