我想创建一个接口,强制所有实现它的类定义一个静态的最终整数变量:
public interface FooInterface {
static final int bar;
}
但是编译器说"变量' bar'可能尚未初始化" 。为什么我必须在界面中给它一个值?我希望每个实现都定义自己的值,所以对我来说似乎不合逻辑,我必须在那里添加一些永远不会被使用的任意数字。
答案 0 :(得分:4)
您无法通过界面执行此操作。接口中的所有变量都隐式public final static
。
您可以在界面中定义int getBar();
,然后所有实现类都需要返回一个值。
然后,您有责任确保实现者表现良好,但您无法阻止实现返回不同的值,例如
public class Foo implements Bar {
public int getBar() {
return (int) System.currentTimeMillis();
}
}
答案 1 :(得分:3)
你从错误的角度思考这个问题。
在实现类中无法覆盖System.IO
。
你可能想这样做:
static final
答案 2 :(得分:2)
你做不到。接口只能强制实现它的类来实现方法。
接口中定义的静态变量属于接口。它不强制实现类声明相同的变量。
答案 3 :(得分:0)
接口中的每个变量都是静态的和最终的。必须在第一行或构造函数中初始化最终变量。因为接口没有构造函数,所以必须在第一行初始化final变量。
答案 4 :(得分:0)
因为它们是最终的,所以需要初始化最终变量。
答案 5 :(得分:0)
在普通类中,我们可以选择像这样定义它并在静态初始化程序块中初始化它的值:
public class FooClass {
static final int bar;
static {
bar = 5;
}
}
如果是接口,则不允许使用静态初始化块,这就是Java要求在声明时将其设置为值的原因。