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>)