gpt4 book ai didi

Java:我可以要求一个子类来定义一个属性值吗?

转载 作者:搜寻专家 更新时间:2023-11-01 02:33:39 26 4
gpt4 key购买 nike

我有一个抽象基类,许多类都对其进行了扩展。我希望所有这些类都为最初在基类中定义的特定属性定义一个唯一值(类似于 serialVersionUID 属性,当未在继承自 可序列化)。

有没有办法在我的抽象基类中声明一个没有值的属性,但需要所有扩展类为其定义一个值?

请注意,该值不必与每个单独的实例相关联,即:它可以定义为 static

编辑:我想我还应该问一个更基本的问题,因为答案千差万别,Java 如何实现 serialVersionUID(就其签名而言)以便我的 IDE 在未定义时发出警告?

最佳答案

字段不能被覆盖,但是方法可以。如果您不需要强制该值是常量,请使用:

class abstract Super() {
/**
* @return the magic value
*/
abstract MyType getValue();
}

如果您确实需要强制该字段是最终的,您可以为每个实例提供自己的副本/引用,就像史蒂夫或迈克的答案一样。

如果你做不到,你可以做一些疯狂的事情,比如:

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;
}
}
}

关于Java:我可以要求一个子类来定义一个属性值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3453699/

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