Mat*_*ins 5 java inheritance guid properties class
我有一个许多类扩展的抽象基类。我希望所有这些类为最初在基类中定义的特定属性定义唯一值(类似于serialVersionUID在继承自 的类中未定义时导致警告的属性Serializable)。
有没有办法在我的抽象基类中声明一个没有值的属性,但需要所有扩展类为其定义一个值?
请注意,该值不必与每个单独的实例相关联,即:它可以定义为static。
编辑:我想我还应该问一个更基本的问题,因为答案千差万别,Java 如何实现serialVersionUID(就其签名而言),以便我的 IDE 在未定义时发出警告?
字段不能被覆盖,但方法可以。如果您不需要强制该值恒定,请使用:
class abstract Super() {
/**
* @return the magic value
*/
abstract MyType getValue();
}
Run Code Online (Sandbox Code Playgroud)
如果您确实需要强制该字段是最终的,您可以为每个实例提供自己的副本/引用,如史蒂夫或迈克的答案所示。
如果你做不到,你也可以做一些疯狂的事情,比如:
class Super() {
private static Map<Class<? extends Super, MyType> map = new ...;
protected Super(MyType value) {
if (!map.contains(getClass())) {
map.put(getClass(), value);
} else {
assert map.get(getClass(), value) == value;
}
}
}
Run Code Online (Sandbox Code Playgroud)