1

Java 8の新機能を紹介します。

私は次のクラスを持っています:

class InstanceMethodClass {

    Integer testStr(String str1,String str2) {
        return str1.compareTo(str2);
    }
}

および次の呼び出し:

 Arrays.sort(new String[]{"1", "3","2"},InstanceMethodClass::testStr );

その後、次のエラーが表示されます。

java: no suitable method found for sort(java.lang.String[],InstanceMe[...]stStr)
    method java.util.Arrays.<T>sort(T[],java.util.Comparator<? super T>) is not applicable
      (cannot infer type-variable(s) T
        (argument mismatch; invalid method reference
          cannot find symbol
            symbol:   method testStr(T,T)
            location: class lambdas.staticReferences.InstanceMethodClass))
    method java.util.Arrays.<T>sort(T[],int,int,java.util.Comparator<? super T>) is not applicable
      (cannot infer type-variable(s) T
        (actual and formal argument lists differ in length))

何が間違っているのか説明してください。

4

2 に答える 2

3

InstanceMethodClass::testStrには 3 つの引数 (メソッドの 2 つの引数String str1,String str2) と、InstanceMethodClassそれが呼び出されるインスタンスがあります。

Arrays.sortが必要ですComparator<String>。これには、2 つの文字列引数を持つメソッドが必要です。

あなたInstanceMethodClass::testStrは一致しません。静的に変更すると、引数testStrが取り除かれ、機能するはずです。InstanceMethodClass

于 2014-12-21T13:08:22.277 に答える
1

それは動作中のバリアントです:

Arrays.sort(new String[]{"1", "3","2"}, new InstanceMethodClass()::testStr );
于 2014-12-21T13:24:39.827 に答える