내가 이런 일을하려고 오전 :자바 일반 목록 <>
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>
을 설정할 수있는 방법이 있습니까? 예를 들어, 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;
중 하나를 작동하지 ..is!
List<String> list;
.. 물론.
String
과 String.class
의 차이점은 무엇입니까?
또는 같은 값을 설정하는 방법이있다 : 당신은 자바 제네릭이 할 수있는 어떤 오해하는
public enum EntityTypeEnum {
ARTICLE(Article)
..
없이 "그러나, 컴파일러는 단순히 말한다" "." 그것이 제네릭이 원하는 것이 아니기 때문입니다. 컴파일 타임에 유형 안전을 강화하기위한 것입니다. 런타임까지 유형을 모르는 경우 제네릭에서 도움을받을 수 없습니다. –
나는 당신의 요점을 알아 냈습니다. 이 타입이 컴파일 타임에 잘 알려져 있다고 상상해보십시오 : Class cl = String.class; 목록 목록; 여전히 컴파일되지 않습니다. –
기술적으로는 컴파일 타임 상수 표현이 아닙니다. 그러나 당신은 간단히 이것을 할 수 없습니다 : generics는 * variable *에 기반 할 수 없으며, 변수의 * type *에 기반 할 수 있습니다. –