首页 > 解决方案 > Java lambda:预期对象但找到 MyClass

问题描述

如果我有:

public class MyClass{
    MyClass(Object b){
        //Some code here
    }
}

我这样做:

MyClass X = new MyClass(new SomeOtherClass());

我假设它工作得很好,因为每个类都有 Object 作为超类。

但是,如果我这样做:

import java.util.function.Predicate;
public class MyClass{
    MyClass(Predicate<Object> b){
        //Some more code here
    }
}

接着:

MyClass X = new MyClass((SomeOtherClass s) -> {
    //Even more code
    return true;
});

我收到一条错误消息:

Incompatible parameter types in lambda expression: expected Object but found SomeOtherClass

我不应该能够SomeOtherClass在那个 lambda 表达式中发送一个对象吗?我正在使用这Object门课,因为我不仅希望能够收到SomeOtherClass,而且还能收到SomeOtherClassXPTO。我试着查了一下,到目前为止什么也没找到,所以如果以前有人问过这个问题,我提前道歉。

标签: javaobjectlambdasuperclass

解决方案


好吧,当您将谓词定义为Predicate<Object>仅限于接受getClass()方法返回的对象时Object

要使这种方法起作用,您将执行类似的Predicate<? extends Object>操作,但这没有多大意义。Predicate<?>那就单独使用吧。

否则,解决此问题的另一种方法是找到两个类的共同点,可能是父类并使用Predicate<? extends ParentClass>.

最终的解决方案是根据您的应用程序逻辑创建一个接口并通过两个对象实现该接口,以便能够执行以下操作Predicate<? extends YourInterface>


推荐阅读