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