bla*_*her 5 java lambda object superclass
如果我有:
public class MyClass{
MyClass(Object b){
//Some code here
}
}
Run Code Online (Sandbox Code Playgroud)
我这样做:
MyClass X = new MyClass(new SomeOtherClass());
Run Code Online (Sandbox Code Playgroud)
我假设它工作得很好,因为每个类都有 Object 作为超类。
但是,如果我这样做:
import java.util.function.Predicate;
public class MyClass{
MyClass(Predicate<Object> b){
//Some more code here
}
}
Run Code Online (Sandbox Code Playgroud)
进而:
MyClass X = new MyClass((SomeOtherClass s) -> {
//Even more code
return true;
});
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
Incompatible parameter types in lambda expression: expected Object but found SomeOtherClass
Run Code Online (Sandbox Code Playgroud)
我不应该能够SomeOtherClass
在该 lambda 表达式中发送对象吗?我使用该Object
课程是因为我不仅希望能够收到SomeOtherClass
,还希望能够收到SomeOtherClassXPTO
。我尝试查找此问题,但到目前为止什么也没发现,所以如果之前有人问过这个问题,我提前表示歉意。
好吧,当您定义谓词时,Predicate<Object>
它仅限于仅接受getClass()
方法返回的对象Object
。
要使这种方法发挥作用,您将执行类似的操作Predicate<? extends Object>
,但这没有多大意义。Predicate<?>
那就单独使用吧。
否则,解决此问题的另一种方法是找到两个类(可能是父类)的共同点并使用Predicate<? extends ParentClass>
.
最终的解决方案是根据您的应用程序逻辑创建一个接口,并由两个对象实现该接口,以便能够执行以下操作Predicate<? extends YourInterface>