Foo.class.cast(o)と書く理由はまったくありません(Foo)o。
一般に、 が具体化可能な型 である場合X、、 thenClass<X> clazzはclazz.cast(o)と同じ(X)oです。
したがって、すべての型が具体化可能である場合、メソッドClass.cast()は冗長で役に立ちません。
残念ながら、現在のバージョンの Java では消去が行われるため、すべての型が再定義できるわけではありません。たとえば、型変数は具体化できません。
Tが型変数の場合、キャストは(T)oチェックされません。これは、実行時に の正確な型がTJVM に認識されないためです。JVM は、oが本当に typeかどうかをテストできませんT。キャストが誤って許可される可能性があり、後で問題が発生する可能性があります。
これは大きな問題ではありません。通常、プログラマーが(T)o. キャストはアプリ ロジックによってチェックされます。
キャストの時点でa が利用可能であると仮定すると、実行時にClass<T> clazz何があるかがわかります。Tランタイム チェックを追加してo、実際にT.
check clazz.isInstance(o);
(T)o;
そして、これは本質的に何をするかClass.cast()です。
どのような場合でもキャストが失敗することは想定していません。したがって、正しく実装されたアプリでは、チェックclazz.isInstance(o)は常に成功する必要があります。したがって、コードが正しいという前提の下で -clazz.cast(o)と同等です。(T)o
コードが正しく、キャストが安全であることを証明できる場合は、パフォーマンス上の理由(T)oから好む可能性があります。clazz.cast(o)別の回答で発生した例ではMutableClassToInstanceMap、キャストが安全であることは明らかであるため、シンプル(T)oで十分でした。