import java.util.List;
import java.util.function.*;
interface SomeTest <T>
{
boolean test(T n, T m);
}
class MyClass <T>
{
boolean myGenMeth(T x, T y)
{
boolean result = false;
// ...
return result;
}
}
class Timepass
{
public static void main(String args[])
{
SomeTest <Integer> mRef = MyClass <Integer> :: myGenMeth; //Statement 1
Predicate <List<String>> p = List<String> :: isEmpty; //Statement 2
}
}
在上面的代码中,Statement 1
产生两个编译时错误
1-无法找到方法
myGenMeth(Integer, Integer)
2-非静态方法
引用myGenMeth(T, T)
无法从静态上下文
其中,Statement 2
没有显示错误。
1- Statement 1
和Statement 2
之间的区别
Statement 2
如何正常工作。Statement 1
产生错误)。答案 0 :(得分:1)
因为您对实例方法有方法引用,但没有指定任何特定实例,所以需要将实例作为参数传递给接口方法。
对于语句2,您可以将此实例传递给test
的{{1}}方法:
Predicate
但对于陈述1,p.test(new ArrayList<>());
并未将实例作为参数:
test
要进行此编译,需要将mRef.test(new MyClass<>(), 1, 2);
更改为:
SomeTest
或者,您可以使方法引用引用特定实例,然后接口方法不需要包含该参数:
interface SomeTest<T> {
boolean test(MyClass<T> instance, T n, T m);
}