如何使用泛型返回泛型类的类类型?

时间:2013-11-26 11:56:04

标签: java generics

假设我有这样的界面;

public interface Validator<T> {
    Class<T> type();
}

如果我想用一个对象实现这个接口,那就没有任何问题;

public OrderValidator implements Validator<Order>{ 
   Class<Order> type(){ 
      return Order.class; 
   }
}

但如果我将Collection作为泛型类型传递给我,我就无法实现此接口;

public CollectionValidator implements Validator<Collection<Item>>{

    Class<Collection<Item>> type(){
        //how can I implement this method to return type of Collection<Item> ?
    }
}

如何实施type()方法以返回Collection< Item>的类型?

Collection< Item>.class不起作用。

2 个答案:

答案 0 :(得分:2)

如果您只是想编译,请尝试:

public interface Validator<T> {
    Class<T> type();
}
public static class CollectionValidator<Item> implements Validator<Collection<Item>>{
    @SuppressWarnings("unchecked") 
    public Class<Collection<Item>> type() {
        return (Class<Collection<Item>>) (Class<?>) Collection.class;
    }
}

答案 1 :(得分:0)

试试这样:

接口:

public interface MyInterface<T> {
    Class<?> type();
}

实现:

public class MyClass implements MyInterface<Object>{

   @Override
   public Class<?> type() {
      //some collection to test
      List<String> lst = new LinkedList<>();

      return lst.getClass();
   }
}