2012-01-31 2 views
2

클래스 템플릿의 typename을 얻고 싶습니다 (ex set). 예를 들어 내가 사용하는 경우 :클래스 템플릿의 typename을 얻습니다.

Set<Personne> p = new HashSet<Personne>(); 
/* manipulate p etc ... */ 

어떻게 p가 비어있는 경우에도 p.getTypeName() 같은 것을 사용하여 (Personne입니다) P의 유형 이름을 알 수 있습니다.

+1

자바가 제네릭 있지만 템플릿 C처럼 ++. 그래서'HashSet'은 "클래스 템플릿"이 아닙니다. Java의 제네릭은 C++의 템플릿과 동일하게 작동하지 않습니다. – Jesper

답변

6

런타임에는 실행할 수 없습니다. 이는 type erasure이 원인입니다.

+0

런타임에 있지 않습니까? 제네릭 형식이 Personne과 같거나 그렇지 않은지를 테스트하고 싶습니다. – Mehdi

+1

@ChrisCashwell -'p'가'Personne'이 아니라'HashSet'을 가리키기 때문에 false가 될 것입니다. –

+0

@ChrisCashwell p는 요소 세트입니다. 어떻게 Personne 인스턴스가 될 수 있습니까? p의 한 요소는 아마도 Personne의 인스턴스 일 수 있습니다. (따라서 int와 같은 형식 일 수는 없습니다.) – shn

1

Java 유형 삭제로 인해 런타임에 매개 변수화 된 유형에 액세스 할 수 없습니다. 그러나, 당신은 어떤 종류가 수도하고 그냥 그 중 하나인지 확인하려면 알고있는 경우 :

if (someObject instanceof SomeType) { 
    ... 
} else if (someObject instanceof SomeOtherType) { 
    ... 
} ... 
+0

그러나 어떤 유형인지 모를 경우 어떤 유형의 객체 세트가 있다고 가정 할 경우 유형이 비어있을 때 유형을 SomeType 또는 SomeOtherType으로 테스트 할 수 없습니다. 맞습니까? – shn

+0

@ user995434 빈 세트가있는 경우 전달 된 매개 변수가 중요한 이유는 무엇입니까? –

+0

SomeType 유형의 객체 집합 A와 SomeOtherType 유형의 객체 집합 B가 로컬에 있다고 가정합니다. 이 집합이 비어 있고 T가 SomeType 인 경우 형식 T의 개체 집합을 예약한다고 가정합니다. 집합 A를 비우려면 (비우기) 싶습니다. 각 개체에 지시자가 없다는 것을 나타내는 경우 어떻게 할 것입니까? 유형의 SomeType 또는 SomeOtherType? @ 크리스 캐쉬 웰 – shn

관련 문제