6
私はJavaのジェネリックを学んでいる、私はこの試みたインスタンス化ジェネリックのパラメータ
class Person {
public static <T> T say() {
return new T; // this has error
}
}
(これはしかしC#で可能である)一般的なパラメータから受信したタイプのインスタンスを作成するいくつかの問題に暗礁:generics in Java - instantiating T
public static <T> T say(Class<?> t) {
return t.newInstance();
}
を
エラー:
incompatible types
found : capture#426 of ?
required: T
動作しません。以下は大丈夫に見えますが、それはいくつかのクラスをインスタンス化伴い、静的な方法で使用することはできません。Instantiating generics type in java
public class Abc<T>
{
public T getInstanceOfT(Class<T> aClass)
{
return aClass.newInstance();
}
}
これはのJava人々が言っている型消去ですか?これはタイプ消去の制限ですか?
この問題の回避策を教えてください。
+1と受け入れ、ないC#、あなたではない(ただしほどエレガント障害;-))。 Btw、これは型消去と呼ばれているので、Tを直接インスタンス化できないのはなぜですか? – Hao
@Hao:正確には、実際のタイプのTは実行時に使用できません。そのため、明示的にするにはClassオブジェクトを渡す必要があります。 –