Guava多接口和泛型,出现错误“XXX类型中的方法XXX不适用于参数”

时间:2016-12-20 13:38:45

标签: java generics guava predicate

谓词和()方法定义如下:

 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>

0 个答案:

没有答案