【发布时间】:2020-07-13 08:51:56
【问题描述】:
我有两个prodicates:
Predicate<CategoryModel> predicate1 = NavigationCategoryModel.class::isInstance;
Predicate<CategoryModel> predicate2 = BrandCategoryModel.class::isInstance;
使用 and if 语句,我如何确定我使用的是哪个谓词?我正在尝试做这样的事情,但显然没有编译:
if(predicate1.equals(NavigationCategoryModel.class::isInstance)){
}
if(predicate1==NavigationCategoryModel.class::isInstance){
}
有什么提示吗?我对 Java 8 lambdas 很陌生
这是 Pojos 的代码(用于测试目的的简单继承):
public class CategoryModel {
}
public class NavigationCategoryModel extends CategoryModel{
}
public class BrandCategoryModel extends CategoryModel {
}
【问题讨论】:
-
您到底想比较他们什么?如果它们是相同类型的对象?
-
听起来像是 XY 问题。为什么需要这个?
-
我想比较一下他们是使用 NavigationCategoryModel 还是 BrandCategoryModel 的谓词
-
我需要知道哪个 isInstance 类正在使用
-
当您将声明替换为语义上等效的
Predicate<CategoryModel> predicate1 = new Predicate<CategoryModel>() { public boolean test(CategoryModel o) { return o instanceof NavigationCategoryModel;} };时,是否有任何方法可以发现它正在测试instanceof NavigationCategoryModel?您是否希望predicate1.equals(new Predicate<CategoryModel>() { public boolean test(CategoryModel o) { return o instanceof NavigationCategoryModel;} })评估为true?是否有任何理由假设 lambda 表达式或方法引用的行为不同?
标签: java java-8 compare java-stream predicate