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 个参数 - 方法的两个参数 -String str1,String str2以及InstanceMethodClass调用它的实例。

Arrays.sort需要 a 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 回答