2012-01-31 19 views
2

クラステンプレート(ex set)の型名を取得したいと思います。例えば私が使用している場合:クラステンプレートの型名を取得する

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

は、どのように私は、pが空の場合でもp.getTypeName()のようなものを使用して(PERSONNEである)Pの型名を知ることができます。

+1

JavaはC++のようにテンプレートをジェネリックを持っていますが、ありません:。、しかし、あなたはこととちょうどそれがそれらの一つであるかどうかを確認したい場合がありますどのような種類それがわかっている場合だから 'HashSet'は「クラステンプレート」ではありません。 Javaのジェネリックスは、C++のテンプレートと同じでは機能しません。 – Jesper

答えて

6

実行時には実行できません。これはtype erasureが原因です。

+0

は実行時ではありませんか?ジェネリック型がPersonneと等しいかどうかをテストするだけです。 – Mehdi

+1

@ChrisCashwell - 'p'は' Person'ではなく 'HashSet'を指しているので、falseになるでしょう。 –

+0

@ChrisCashwell pは要素の集合です。Personneのインスタンスはどのようになりますか? pの1つの要素はおそらく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の場合、タイプAのオブジェクトのセットを予約すると仮定して、セットAを空にする(クリアする)必要があります。各オブジェクトにインジケータがないタイプのSomeTypeまたはSomeOtherType? @ChrisCashwell – shn

関連する問題