gpt4 book ai didi

java - 接口(interface)是 Java 8 中实用程序类的有效替代品吗?

转载 作者:IT老高 更新时间:2023-10-28 20:35:27 26 4
gpt4 key购买 nike

在过去十年左右的时间里,我一直在为我的 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;
}
}

现在,随着 static methods in interfaces 的推出在 Java 8 中,我最近发现自己在使用实用程序接口(interface)模式:

public interface SomeUtilityInterface {
String SOME_CONSTANT = "Some constant";

static Object someUtilityMethod(Object someParameter) {
/* ... */

return null;
}
}

这让我摆脱了构造函数,以及许多隐含在接口(interface)。

这种方法有什么缺点吗?使用实用程序类而不是实用程序接口(interface)有什么好处?

最佳答案

只有当你期望有人会实现它时,你才应该使用接口(interface)。例如,java.util.stream.Stream 接口(interface)有一堆静态方法,这些方法可以位于一些 StreamsStreamUtils 类之前Java 8。但是它是一个有效的接口(interface),它也有非静态方法并且可以实现。 java.util.Comparable 是另一个例子:那里的所有静态方法都只支持接口(interface)。您不能禁止用户实现您的公共(public)接口(interface),但对于实用程序类,您可以禁止他们实例化它。因此,为了代码清晰,我建议不要使用接口(interface),除非它们打算被实现。

关于@saka1029 答案的说明。虽然您确实不能在同一个接口(interface)中定义帮助器私有(private)方法和常量,但在同一个包中创建一个包私有(private)类(如 MyInterfaceHelper)并不是问题,它将具有所有必要的实现相关东西。一般来说,包私有(private)类可以很好地向外界隐藏您的实现细节。

关于java - 接口(interface)是 Java 8 中实用程序类的有效替代品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30905236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com