使用java中的泛型过滤集合

时间:2013-06-12 13:39:40

标签: java generics

我有以下类型的集合:

Collection<GenericMessage<Collection<Client>>>;

Collection<GenericMessage<Client>>;

Collection<GenericMessage<SearchResponse<Client>>>;

Collection<Client> filteredClients

我得到一个对象:

Collection<GenericMessage<?>> resObject = (Collection<GenericMessage<?>>) response.getEntity();

我需要从响应对象进行过滤,该对象可能是上述集合类型之一,即未出现在filteredClients中的客户端。

有干净的方法吗?

GenericMessage看起来像这样:

public class GenericMessage<T> {
   T object;

   public T getObject(){
    return object;
   }
   public void setObject(T object){
    this.object = object;
   }
}

客户端看起来像这样:

public class Client extends Base

SearchResponse如下所示:

public class SearchResponse<T> extends Base{
   List<T> results;

   public List<T> getResults() {
        return results;
   }

    public void setResults(List<T> results) {
        this.results = results;
   }
}

2 个答案:

答案 0 :(得分:2)

 if (!resObject.isEmpty()){
      GenericMessage<?> firstMessage = resObject.iterator().next();
      Object first = firstMessage.getObject();
      if (first instanceof Client){
         // do Client stuff
      }else if (first instanceof SearchResponse){
         // do SearchResponse
      }else if (first instanceof Collection){
         // blah
      }else{
         // error?
      }
 }

答案 1 :(得分:0)

John B wrote或将类类型参数添加到GenericMessage类。

类似的东西:

GenericMessage(Class<?> type) {
    this.type= type;
}

public Class<?> getType() {
    return type;
}

稍后,您可以过滤此值:

if (getType().equals(Client.class)) {
   ... //do whatevs
} else if ...