Java 使返回泛型对象而不必使类泛型
我有一个类,它应该返回一个泛型ArrayList,所以它应该是: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通用对象; ..
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意味着修复警告。是的,你可以隐藏它。