返回一个通用对象,而不必使类通用

时间:2014-03-31 09:32:48

标签: java generics

我有一个应该返回通用ArrayList的类,所以它将是:

public class MyClass{

   HashMap<String,Object> genericObjects;
   .... 
   public List<T> getAsList(String key){
       return (List<T>)genericObjects.get(key);
   }

}

内部成员由解析器填充,并且该内部hashmap的成员可以是任何东西,因此让它像对象一样有意义。用户必须知道它是哪种对象......非常类似于jdbc中的ResultSet。

因此,用户只需要这样做:

List<String> str = myClass.getAsList("strings");

问题在于,为了这样做,我不得不在类定义中添加泛型。 但是,像这样实例化MyClass:

MyClass<String> myClass = new MyClass<String>();
List<String> strmyClass.getAsList("strings");

没有意义,因为类型应该只对方法getAsString有意义,它返回一个泛型...不是每个方法都有!

1 个答案:

答案 0 :(得分:5)

听起来你想让这个方法变得通用,就像这样:

public <T> List<T> getAsList(String key){
    return (List<T>)genericObjects.get(key);
}

现在你可以这样称呼它:

MyClass myClass = new MyClass();
List<String> strings = myClass.<String>getAsList("strings");
List<Integer> integers = myClass.<Integer>getAsList("integers");