我可以强制使用子类来创建枚举吗?
class Document<T extends Enum<T>>{
Map<T, String> fields;
}
class TextDocument extends Document<TextDocument.Field>{
public enum Field{
...
}
}
如何强制执行Document的任何实现以在其中包含名为Field的枚举?在上面的示例中,TextDocument可以使用其他枚举(例如GraphDocument.Field)扩展Document,这是不允许的。我该如何创建此限制?我需要对子类强制执行此规则 - &#34;您必须拥有自己的枚举&#34;。这甚至可能吗?通过一些hacky方式?有任何想法吗?
答案 0 :(得分:1)
简而言之,你不能。但是,您可以强制它返回特定枚举值的数组。您还可以强制枚举实现接口。
public interface SomeInterface {
// any methods you want to be able to perform on the enums
}
public abstract class SomeSuperClass<T extends SomeInterface> {
abstract T[] getSome();
}
public class SomeSubclass extends SomeSuperClass<SomeInterface> {
public enum SomeEnum implements SomeInterface {
testEnum {
// interface implementation
}
}
public SomeInterface[] getSome() {
return SomeEnum.values();
}
}
这是一个非常尴尬的解决方案,但它确实有效。