1

効果的なJavaから:

ジェネリックメソッドの注目すべき機能の1つは、ジェネリックコンストラクターを呼び出すときに必要なように、型パラメーターの値を明示的に指定する必要がないことです。コンパイラーは、メソッド引数の型を調べることにより、型パラメーターの値を計算します。

では、パラメーターを受け取らないメソッドの場合、コンパイラーはどのように型を推測するのでしょうか。

たとえば、呼び出されるたびに新しいHashMapを作成する次の静的ファクトリメソッドについて考えてみます。

// Generic static factory method
public static <K,V> HashMap<K,V> newHashMap() {
return new HashMap<K,V>();
}

そして、メソッドが次のように呼び出されたとき:

Map<String,String> pair = newHashMap(); //it returns a Map<String,String>

そしてそれが

Map<String, List<String>> anagrams =newHashMap(); // it returns a Map<String,List<String>
4

2 に答える 2

4

変数タイプに基づいて、リターンも割り当てられていると推測します。

public class GenericTest {

    public static void main(final String[] args) {
        final GenericTest test = new GenericTest();
        String data = test.echo();
    }

    public <T> T echo() {
        return null;
    }
}

data上記のコード例では、コンパイラはフィールドのタイプ(この場合は)に基づいてジェネリックパラメータタイプを推測しますString

于 2013-02-25T15:15:58.337 に答える
0

コンパイラーには、型を推測するための限られた数の変数しかありません。メソッドが引数をとらない場合、戻り値を使用してメソッドを入力することはできず、メソッド自体の名前が残るため、メソッドは単純なオーバーライドのみになります。コンパイラは、継承チェーンのどこまで上にあるかを選択して、実際に呼び出されるメソッドを持つ親/子クラスを選択する必要があります。

于 2013-02-25T15:20:54.343 に答える