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

我有一个许多类扩展的抽象基类.我希望所有这些类为最初在基类中定义的特定属性定义唯一值(类似于serialVersionUID属性,该属性在未从Serializable继承的类中定义时会导致警告).

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

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

编辑:我想我还应该问一个更基本的问题,因为答案变化如此广泛,Java是如何实现serialVersionUID(就其签名而言),以便我的IDE在未定义时引发警告?

解决方法:

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

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

如果您确实需要强制该字段是最终的,您可以为每个实例提供自己的副本/引用,如Steve或Mike的答案.

如果你不能这样做,你可以做疯狂的事情,如:

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;
        }
    }
}
上一篇:ArrayList集合的方法


下一篇:CxGrid导出Excel时清除颜色的设置