java - 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
。我试着查了一下,到目前为止什么也没找到,所以如果以前有人问过这个问题,我提前道歉。
解决方案
好吧,当您将谓词定义为Predicate<Object>
仅限于接受getClass()
方法返回的对象时Object
。
要使这种方法起作用,您将执行类似的Predicate<? extends Object>
操作,但这没有多大意义。Predicate<?>
那就单独使用吧。
否则,解决此问题的另一种方法是找到两个类的共同点,可能是父类并使用Predicate<? extends ParentClass>
.
最终的解决方案是根据您的应用程序逻辑创建一个接口并通过两个对象实现该接口,以便能够执行以下操作Predicate<? extends YourInterface>
推荐阅读
- linux - Oracle Database 12c 安装 GUI 问题
- sql - 列名以下划线 (_) 开头
- oracle - 从 Oracle APEX 中的 RESTful 服务返回单个大 clob
- jmeter - 如何在 Jmeter 中使用 JMS Point-to-Point Sampler 将消息发送到 IBM MQ 队列
- php - Laravel Eloquent 如何在 php 上获得第一和第三四分位数?
- objective-c - 未找到 Objective-C 头文件 (AFNetworking.h)
- matching - 从 MatchThem 中提取匹配的数据集
- python-3.x - 如何通过 _id:ObjectId 从其他集合中删除 fs.files 和 fs.chunks 字段
- python - 训练神经网络时损失增加
- azure-cosmosdb - 当数据被删除并且预置吞吐量降低时,物理分区的数量是否会减少?