我试图做这样的事情:Java的泛型列表<>
1.方法
Type ty = entityType.getEntityClass(); // could be e.g. String.class
List<ty> list;
2.方法
Class cl = entityType.getEntityClass(); // could be e.g. String.class
List<cl> list;
然而,编译器只是说“没有”。
是否有任何方法来设置例如通用类型<T>
一个java.util.List动态只有通过具有例如String.class
或foo.getClass()
?
...
什么其实我试图做的是通过EntityTypeEnum
类型的给定参数初始化列表或它的Class
属性值。
public enum EntityTypeEnum {
ARTICLE(Article.class),
ORDER(OrderHeader.class),
CUSTOMER(Customer.class),
CUSTOMER_SESSION(CustomerSession.class);
private final Class entityClass;
private EntityTypeEnum(final Class entityClass) {
this.entityClass = entityClass;
}
public Class getEntityClass() {
return entityClass;
}
}
建设性的批评是值得欢迎的。 谢谢!
地址:(安迪的评论的响应)
Class cl = String.class;
List<cl> list;
..是不是无论是工作!
List<String> list;
..works,当然。
那么String
和String.class
之间有什么区别?
还是有办法设置的值,如:
public enum EntityTypeEnum {
ARTICLE(Article)
..
“不过,编译器只是说‘不’。”因为这不是泛型。它们用于在编译时强制执行类型安全;如果您直到运行时才知道类型,泛型不能帮助您。 –
我明白了你的观点。想象一下这个类型在编译时是众所周知的:Class cl = String.class;列表列表; 它仍然不会被编译。 –
从技术上讲,这不是一个编译时常量表达式。但是你不能这样做:泛型不能基于*变量*,而是变量的*类型*。 –