【发布时间】:2014-12-25 17:43:04
【问题描述】:
问题 1:我对这些代码有点困惑:
public class MyClass1 <E extends Enum<?>> {
// ...
}
public class MyClass2 <E extends Enum<E>> {
// ...
}
MyClass1 和MyClass2 有什么区别,三个不同的E 是什么意思?
问题 2:来自Class Enum <E extends Enum<E>>
这是所有 Java 语言枚举类型的通用基类。
但不是所有Enum类型的公共基类Enum<E>吗?
问题 3:现在我有这门课:
public class MyClass<E extends Enum<E>> {
// for example, EnumSet<Category>
public Set<E> category;
// how to initial this member
private Class<E> enumType;
// initial this.category with given strings
public void getEnumSetFromStringList(List<String> list) {
this.category = EnumSet.noneOf(enumType);
for (String str : list) {
this.category.add(Enum.valueOf(this.enumType, str));
}
}
}
// this is the Category of Enum type
public enum Category {
LOCATION("LOCATION"),
HUMAN("HUMAN"),
// ...
DESCRIPTION("DESCRIPTION");
private final String categoryName;
Category(String categoryName) {
this.categoryName= categoryName;
}
}
如何在
MyClass中初始化数据字段enumType?如果
MyClass不包含数据字段enumType,那么函数getEnumSetFromStringList(List<String> list)怎么能得到泛型类型<E extends Enum<?>>的类型呢?我可以这样获取枚举类型:
E.class吗?如果不是,是不是因为编译时泛型类型的type-erasure?
【问题讨论】:
标签: java generics interface enums type-erasure