Java 使返回泛型对象而不必使类泛型

Java 使返回泛型对象而不必使类泛型,java,generics,Java,Generics,我有一个类,它应该返回一个泛型ArrayList,所以它应该是: public class MyClass{ HashMap<String,Object> genericObjects; .... public List<T> getAsList(String key){ return (List<T>)genericObjects.get(key); } } 公共类MyClass{ HashMap通用对象; ..

我有一个类,它应该返回一个泛型ArrayList,所以它应该是:

public class MyClass{

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

}
公共类MyClass{
HashMap通用对象;
.... 
公共列表getAsList(字符串键){
返回(列表)genericObjects.get(键);
}
}
内部成员由解析器填充,内部hashmap的成员可以是任何东西,因此我认为将其设置为对象是有意义的。用户必须知道它是哪种类型的对象……非常像jdbc中的ResultSet

因此,用户只需执行以下操作:

List<String> str = myClass.getAsList("strings");
List str=myClass.getAsList(“字符串”);
问题是,为了做到这一点,我不得不在类定义中添加泛型。 但是,像这样实例化MyClass:

MyClass<String> myClass = new MyClass<String>();
List<String> strmyClass.getAsList("strings");
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");
MyClass MyClass=新的MyClass();
List strmyClass.getAsList(“字符串”);

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

听起来您希望使该方法通用,如下所示:

MyClass<String> myClass = new MyClass<String>();
List<String> strmyClass.getAsList("strings");
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");
public List getAsList(字符串键){
返回(列表)genericObjects.get(键);
}
现在你可以这样称呼它:

MyClass<String> myClass = new MyClass<String>();
List<String> strmyClass.getAsList("strings");
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");
MyClass MyClass=新的MyClass();
List strings=myClass.getAsList(“strings”);
List integers=myClass.getAsList(“integers”);

听起来您希望使该方法通用,如下所示:

MyClass<String> myClass = new MyClass<String>();
List<String> strmyClass.getAsList("strings");
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");
public List getAsList(字符串键){
返回(列表)genericObjects.get(键);
}
现在你可以这样称呼它:

MyClass<String> myClass = new MyClass<String>();
List<String> strmyClass.getAsList("strings");
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");
MyClass MyClass=新的MyClass();
List strings=myClass.getAsList(“strings”);
List integers=myClass.getAsList(“integers”);

试试
public List getAsList(String key){
这样做很好!我对未检查的强制转换警告无能为力,对吧?不对。警告是因为您可能会这样做:
myClass.generiobjects.put(“strings”,new ArrayList());List integers=myClass.getAsList(“strings”)
好的,你可以添加
@SuppressWarnings(“未选中”)
来隐藏警告。我认为@Phate意味着修复警告。是的,你可以隐藏它。试试
公共列表getAsList(字符串键){
相反。这样很好!我对未检查强制转换警告无能为力,对吗?不。警告是因为您可能会这样做:
myClass.generiobjects.put(“strings”,new ArrayList());List integers=myClass.getAsList(“strings”);
您可以添加
@SuppressWarnings(“未检查”)
这将隐藏警告。我认为@Phate意味着修复警告。是的,你可以隐藏它。