Predicate and() method is defined like this :
com.google.common.base.Predicates.and(Predicate<? super T>, Predicate<? super T>)
I have three interfaces with the third extending others :
public interface IFolderable {
String getFolder();
}
public interface IId {
int getId();
}
public interface IBoth extends IFolderable, IId {}
And an object implementing the third:
public class MyClass implements IBoth {
String getFolder() {
return "myFolder";
}
int getId() {
return 1;
}
}
I want to do something like this :
List<MyClass> list = Lists.newArrayList();
Collections2.filter(list, Predicates.and(new Predicate<IFolderable>() {
// core predicate using getFolder();
}, new Predicate<IId>() {
// core predicate using getId();
}));
But this code generate this error at compile time :
The method
and(Predicate<? super T>, Predicate<? super T>)
in the type Predicates is not applicable for the arguments (new Predicate<IFolderable>(){}
,new Predicate<IId>(){}
)
How can I mix two predicates specialized on one interface over the and() guava method, in order to filter a list of MyClass ?
More generally, how can I specialized generic method in that way ?
I don't want to declare Predicate with IBoth generic type, because I have other object implementing just IFolderable or IId. (I don't want to have a new Predicate<IBoth>
)