2017-08-08 6 views
0

私は常にジェネリックスを使用していて、このように使用されている角かっこは常に表示されています:Class<Type>(例:List<String>)。静的関数の呼び出しの前にジェネリックの角括弧

今日は、Class.<TypeA, TypeB>staticCall()のような静的メソッドを呼び出す前にジェネリックス仕様が発生しました。実際の例はImmutableMap.<String, String>builder()です。

私はこの使用法を見たことがないし、documentationでこの特定の使用法を見つけることができません。誰かが何が起こっているのか説明できますか?

+1

それは一般的な静的メソッドですが、ここで答えを参照してください。 https://stackoverflow.com/questions/27166610/what-does-the-dot-operator-before-the- generic-parameter-mean –

+0

ああ、はい、これは私が探していたものでした!私は捜していませんでした。それ以降はジェネリックスの代わりに演算子を使用します。私の同じ方法でそれを検索する人々のために開いている可能性がありますか? –

答えて

1

、このセクションの下に可能であることを言及しています。

Util.<Integer, String>compare(p1, p2); 

今コンパイラが文脈から型を推測:

は、Java 7の前に、あなたは一般的な参照のタイプを指定する必要がありました。

+0

私はJava 8を使用していますが、Generic参照を指定する必要があります。 :混乱しています: –

+1

[this](https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html)をお読みください。 –

-1

これは複数のタイプを示しています。 インタフェース地図

ので、それは2 generic typesを取ります。リストには、あなたが表示されます上部にMap

用のJavaドキュメントから

List<String> 

を参照してください理由は1つの汎用型を取ります。変更可能なマップの例では、K(ey)はストリングであり、V(alue)もストリングであるということです。あなたが提供されたリンクで

、それはそれらがGeneric Methodsと呼ばれているボックスクラスの

Aジェネリックバージョン

+0

多分、私はそれを指定しなければならなかった、私はあなたが2つのタイプを指定できることを知っています。私はあなたがメソッド呼び出しの前にそれを指定できることを知らなかった。 :) –

+0

私はあなたが静的メソッドを呼び出すクラスをタイプしていると思います - 不変のマップクラス自体は、型付きのキーと値に固有のものです。静的メソッドを呼び出す前に常にクラス名を参照します。この場合、クラス名にはジェネリック型の実装が含まれています。 –

0

クラスレベルでジェネリックも定義できます。

ImmutableMap.BuilderはBuilderが内部静的クラスであることを示します。

とビルダーメソッドは、引数が

を意味するKとVを持つことになります任意の型が入れて、あなたの場合は使用して追加することができるように、代わりにプット(文字列、文字列)それはプットのようなmethosを提供(K、V)を提供することを意味しますあなたは同じタイプを使う必要があります。例えば

あなたは、文字列を渡すことでBuilder.Putを呼び出している場合、文字列は、GETで、私たちは直接文字列

文字列のval = Bullder.get(K)に割り当てることができます。

これは、ImmutableMap.Builderのすべてのメソッドがどのクラスタイプでも機能することを意味します。

これはジェネリックの力で、異なるタイプのメソッドをオーバーレイドする必要がないという意味です。 はちょうど下記のように定義する:

public Builder<K, V> put(K key, V value) { 
    ensureCapacity(size + 1); 
    ImmutableMapEntry<K, V> entry = entryOf(key, value); 
    // don't inline this: we want to fail atomically if key or value is null 
    entries[size++] = entry; 
    return this; 
} 
関連する問題