は、次のコードを考えてみましょう2ウェイ:Javaのパラメータ化メソッドの戻り値の型は
(new MyClass()).<ExtType>foo(ExtType.class);
興味深いことに、メソッドがパラメータ化されて宣言されていても、Eclipseは に対して1回の呼び出しで警告を発行しません。ここで
はT
秒の戻り値をキャストに使用されている最初のコードスニペットで、私の質問です。 パラメータはT
、戻り値はT
ですか?戻り値の型を明示的に指定しないと(「1ウェイ」のように)警告が出されないのはなぜですか?
お返事ありがとうございます。 '(新しいMyClass())foo();'が呼び出され、 'foo()'の中にキャストが実行されないか、より正確に 'Object'へのキャストが行われるでしょうか? – dhblah
@gasanでもキャストは起こりますが、戻り値を代入する変数の型から 'T'の型が推測されます。 – Thomas
@Tomas、まあ、実際に私はこのコードを使ってチェックしました: 'public class GenericTest { static class MyType {} 静的クラスExtTypeはMyType {}を拡張します。 静的クラスMyClass { MyType myField = new MyType(); public T foo(){ return(T)myField; 。 }} パブリック静的無効メイン(文字列[] args){ ExtType T =(新しいMyClassの())のfoo();System.out.println(t); }} 'とClassCastExceptionが唯一のfoo()'実行自体が例外なく実行 'FOO() 'T''の結果とを '割り当てに起こります。これは 'foo()'にキャストされていないことを意味します。 –
dhblah