11

「Java - 初心者向けガイド」で次のコードを読みました。

interface SomeTest <T>
{
    boolean test(T n, T m);
}

class MyClass
{
    static <T> boolean myGenMeth(T x, T y)
    {
        boolean result = false;
        // ...
        return result;
    }
}

次のステートメントは有効です

SomeTest <Integer> mRef = MyClass :: <Integer> myGenMeth;

上記のコードの説明に関して2つのポイントがありました

1 - ジェネリック メソッドがメソッド参照として指定されている場合、その型引数は::メソッド名の後と前にあります。

2 - ジェネリック クラスが指定されている場合、型引数はクラス名に続き、::.

私の質問:-

上記のコードは、最初に引用されたポイントの例です

2 番目の引用ポイントを実装するコードの例を教えてもらえますか?

(基本的に、2番目に引用された点がわかりません)。

4

2 に答える 2

2

例えば

  Predicate<List<String>> p = List<String>::isEmpty;

実際、ここでは型引数は必要ありません。型推論が処理します

  Predicate<List<String>> p = List::isEmpty;

しかし、型推論が失敗した場合、たとえば、このメソッド参照を推論のための十分な制約なしでジェネリック メソッドに渡す場合、型引数を指定する必要があるかもしれません。

于 2015-07-06T15:06:43.353 に答える
2

2 番目の引用符は、型パラメーターがクラスに属していることを意味します。例えば:

class MyClass<T>
{
    public boolean myGenMeth(T x, T y)
    {
        boolean result = false;
        // ...
        return result;
    }
}

これは次のように呼び出されます。

SomeTest<Integer> mRef = new MyClass<Integer>() :: myGenMeth;
于 2015-07-06T11:58:36.817 に答える