[英]Java: generic enum in method parameter
对应以下问题:
我想知道,如何格式化代码以通常需要枚举。
Foo.java
public enum Foo {
a(1), b(2);
}
Bar.java
public class Bar {
public Bar(generic enum);
}
稍后我将有更多的枚举类,如“foo”,但你仍然可以创建包含任何类型的枚举类的栏。 顺便说一下,我有“jdk1.6.0_20”......
请参阅EnumSet中的方法以供参考,例如
public static <E extends Enum<E>> EnumSet<E> of(E e)
(此方法返回一个EnumSet,其中包含给定Enum元素中的一个元素e)
所以你需要的通用界限是: <E extends Enum<E>>
实际上,你可能会让Bar
本身具有通用性:
public class Bar<E extends Enum<E>> {
private final E item;
public E getItem(){
return item;
}
public Bar(final E item){
this.item = item;
}
}
您也可以添加一个工厂方法,如from
, with
等。
public static <E2 extends Enum<E2>> Bar<E2> with(E2 item){
return new Bar<E2>(item);
}
这样,在客户端代码中,您只需编写一次通用签名:
// e.g. this simple version
Bar<MyEnum> bar = Bar.with(MyEnum.SOME_INSTANCE);
// instead of the more verbose version:
Bar<MyEnum> bar = new Bar<MyEnum>(MyEnum.SOME_INSTANCE);
参考:
你也可以这样做:
public class Bar {
public Bar(Enum<?> e){}
}
每个枚举都扩展了Enum。 然后,如果需要枚举常量,可以使用它:
e.getDeclaringClass().getEnumConstants()
public class bar {
public <E extends Enum<E>> void bar(E enumObject);
}
bar
方法现在可以接收任何类型的枚举。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.