8

ジェネリックのないクラスに関しては、次のようにこの .class 属性にアクセスできます。

class Foo{
    Class<Foo> getMyClass(){
        return Foo.class;
    }
}

しかし、Foo にジェネリックがある場合、この「.class」属性にアクセスするにはどうすればよいですか? このような:

class Foo<T>{
    Class<Foo<T>> getMyClass(){
        return (Foo<T>).class //this doesnt work...
    }
}

を返そうとしましたFoo.classが、うまくいきません: "cannot cast from Class<Foo> to Class<Foo<T>>"

Foo<T>さんのクラスにアクセスするにはどうすればよいですか?

4

2 に答える 2

8

あなたはいつでもこれを行うことができます:

class Foo<T>{
    Class<Foo<T>> getMyClass(){
        return (Class<Foo<T>>)(Class<?>)Foo.class
    }
}

Foo<T>実際には安全ではないため、チェックされていないキャスト警告が表示されます-他の人が述べたように、返されたクラスオブジェクトは「のクラス」としてはもはや「のクラス」ではありませんFoo<SomethingElse>

于 2013-07-15T07:05:44.313 に答える
3

タイプ eraserのため、方法はありません。これ:

Foo<T>.class

... は実行時に取得できません。 の型に関係なく、常に同じ型になりTます。実行時にこれだけが存在します:

Foo.class
于 2013-07-13T22:21:45.287 に答える