在过去的十年左右,我一直在为我的Java实用类使用以下模式。该类仅包含静态方法和字段,被声明为
final
以便不能被继承,并且具有private
构造函数以便不能被实例化。public final class SomeUtilityClass {
public static final String SOME_CONSTANT = "Some constant";
private SomeUtilityClass() {}
public static Object someUtilityMethod(Object someParameter) {
/* ... */
return null;
}
}
现在,随着Java 8中引入接口静态方法,我最近发现自己正在使用一个实用的接口模式:
(了解更多)public interface SomeUtilityInterface {
String SOME_CONSTANT = "Some constant";
static Object someUtilityMethod(Object someParameter) {
/* ... */
return null;
}
}
这使我能够摆脱构造函数,以及在接口中隐含的许多关键字(public
、static
、final
)。
这种方法有什么缺点吗?与使用实用程序接口相比,是否有任何好处?
enum
用作实用程序类。我已经滥用了它们来创建我的单例(在极少数情况下)。 - Robby Cornelisseninterface
中添加一个包含非“public”类型引用的抽象方法来防止对interface
的任意实现。这样,包外的实现就是不可能的。然而,这并不会提高清晰度,因为抽象方法将出现在public
API 中,开发人员会开始想知道该方法的目的,并且当他们尝试实现接口时发现不可能时,他们会认为一定有错误。 - Holger