我想创建一个接口,强制所有实现它的类定义一个静态的最终整数变量:
public interface FooInterface {
static final int bar;
}
但是编译器会提示“变量'bar'可能未被初始化”。为什么我需要在接口中给它一个值?我希望每个实现都定义自己的值,所以对我来说,在那里放置一些永远不会使用的任意数字似乎是不合逻辑的。
public final static
。int getBar();
,然后所有实现该接口的类都需要返回一个值。public class Foo implements Bar {
public int getBar() {
return (int) System.currentTimeMillis();
}
}
您的思路有些偏颇。
static final
不能在实现类中被重写。
您可能希望这样实现:
public interface FooInterface {
int getBar();
}
您不能这样做。接口只能强制实现它的类去实现方法。
在接口中定义的静态变量属于接口本身。它不会强制实现该接口的类声明相同的变量。
public class FooClass {
static final int bar;
static {
bar = 5;
}
}
如果是一个接口,静态初始化块不被允许。这就是为什么Java要求在声明时设置初始值。
接口中的每个变量都是静态和不可变的。final变量必须在第一行或构造函数中初始化。因为接口没有构造函数,所以必须在第一行初始化final变量。
因为它们是 final 的,final 变量需要被初始化。