gpt4 book ai didi

java - 为什么有些开发人员在 Java 的接口(interface)中声明 String 对象,它是如何工作的?

转载 作者:搜寻专家 更新时间:2023-10-30 19:51:49 25 4
gpt4 key购买 nike

我在分析项目中的代码时,遇到了这种情况。我有一个带有完整字符串常量声明的接口(interface),如下所示

public interface SampleInterface {
String EXAMPLE_ONE = "exampleOne";
String USER_ID = "userId";

public void setValue();
}

如果任何类实现了这个 SampleInterface 接口(interface),它声明的变量会发生什么变化?

  • 继承类是否可以访问所有变量?
  • 实现的类是否需要覆盖声明?
  • 当我们可以为此目的使用抽象类时,在接口(interface)中声明 String 变量的目的可能是什么?

另外,最好的策略是什么:

  1. 具有最终静态字段和私有(private)构造函数的类?
  2. 具有上述变量的接口(interface)?

最佳答案

这是一个常见的 Java 习语

在 Java 的接口(interface)中,所有成员都是隐式 public,特别是字段是隐式public static final您别无选择。如果您尝试使用 public 以外的任何其他权限级别,编译器会向您尖叫,因为它没有任何意义。

所以任何实现类确实会继承成员,包括这些静态常量字段

人们为什么使用这个成语?

在界面中执行此操作的原因有多种,通常是将其用作常量存储。这个习语用于将常量简单地捆绑在一个地方,不一定要以面向对象的方式将接口(interface)用作继承树的一部分。

因此您可以照常调用 MyInterface.MY_CONST 来访问您的常量之一。

当您不需要定义任何行为时,您通常会通过接口(interface)执行此操作,因此当您不需要任何方法时。它实际上只是一个静态存储(通常,界面本身也是 final )。您也可以为此使用抽象类,例如,如果您想要封装和隐藏实现的细节。但在这种情况下,您同时拥有字段和方法,通常您的目标只是为子类提供一些常量和契约

考虑到您的情况还有一个方法签名作为接口(interface)的一部分,显然有实现此接口(interface)的意图。在这种情况下,您仍然可以通过以下任一方式访问您的数据:

  • MyInterface.MY_CONST,
  • MyExtendingClass.MY_CONST,
  • instanceOfMyExtendingClass.MY_CONST

更多信息

有关更多信息,请查看:

  • FAQ entry以及跟随它的人,
  • Anon 和 Jeff 关于滥用此表格的评论,
  • Enum type as introduced since Java 5 (正如 John 所提到的,在许多情况下,这肯定是一个更好的主意:更优雅,在传递它时具有类型安全的额外好处,并使用相当优化的结构来查找和操作值)。

关于java - 为什么有些开发人员在 Java 的接口(interface)中声明 String 对象,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4435529/

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