谓词和()方法定义如下:
com.google.common.base.Predicates.and(Predicate<? super T>, Predicate<? super T>)
我有三个接口,第三个扩展其他接口:
public interface IFolderable {
String getFolder();
}
public interface IId {
int getId();
}
public interface IBoth extends IFolderable, IId {}
实现第三个的对象:
public class MyClass implements IBoth {
String getFolder() {
return "myFolder";
}
int getId() {
return 1;
}
}
我想做这样的事情:
List<MyClass> list = Lists.newArrayList();
Collections2.filter(list, Predicates.and(new Predicate<IFolderable>() {
// core predicate using getFolder();
}, new Predicate<IId>() {
// core predicate using getId();
}));
但是这段代码在编译时会产生这个错误:
类型中的方法
and(Predicate<? super T>, Predicate<? super T>)
谓词不适用于参数(new Predicate<IFolderable>(){}
,new Predicate<IId>(){}
)
如何通过and()guava方法混合两个专用于一个接口的谓词,以便过滤MyClass列表?
更一般地说,我如何以这种方式专门化通用方法?
我不想用IBoth泛型类型声明Predicate,因为我有其他对象实现IFolderable或IId。 (我不想拥有new Predicate<IBoth>
)