我介绍了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))
请解释我做错了什么?
InstanceMethodClass::testStr
有 3 个参数 - 该方法的两个参数 - String str1,String str2
,以及调用它的InstanceMethodClass
实例。
Arrays.sort
期望一个Comparator<String>
,这需要一个带有 2 个字符串参数的方法。
您的InstanceMethodClass::testStr
不匹配。如果将testStr
更改为静态,则将摆脱InstanceMethodClass
参数,它应该可以工作。
它是工作变体:
Arrays.sort(new String[]{"1", "3","2"}, new InstanceMethodClass()::testStr );