当我在分析项目中的代码时,我遇到了这种情况.我有一个带有完整字符串常量声明的接口,如下所示
public interface SampleInterface {
String EXAMPLE_ONE = "exampleOne";
String USER_ID = "userId";
public void setValue();
}
Run Code Online (Sandbox Code Playgroud)
如果任何类实现此SampleInterface
接口,它声明的变量会发生什么?
另外,最好的策略是什么:
hay*_*lem 29
在Java的接口中,所有成员都是隐式的 public
,特别是字段是隐式的public static final
.你没有选择.如果您尝试使用除公共之外的任何其他权限级别,编译器会尖叫您,因为它没有任何意义.
因此任何实现类都将继承成员,包括这些静态常量字段.
在界面中执行此操作有几个原因,通常是将其用作常量存储.这个习惯用于在一个地方简单地将常量捆绑在一起,不一定要将接口用作OO方式的继承树的一部分.
所以你可以调用usuall MyInterface.MY_CONST
来访问你的一个常量.
当您不需要定义任何行为时,通常会通过接口执行此操作,因此当您不需要任何方法时.它实际上只是一个静态存储(通常,接口final
本身也是如此).您也可以使用abstract class
for,例如,如果要封装和隐藏实现的详细信息.但在这种情况下,你有两个字段和方法,通常你的目标只是提供一些常量和子类的契约.
考虑到你的情况,还有一个方法签名作为你的界面的一部分,显然有意实现这个接口.在这种情况下,您仍然可以访问以下数据:
MyInterface.MY_CONST
,MyExtendingClass.MY_CONST
,instanceOfMyExtendingClass.MY_CONST
.有关更多信息,请查看: