我想将我的代码从非类型对象重构为类型化对象。
例如,这是我当前的代码:
public class TestClass {
ArrayList list = new ArrayList();
public ArrayList testMethodA() {
list.add("string1");
list.add("string2");
list.add("string3");
list.add("string4");
list.add("string5");
return list;
}
}
我想将其转换为类型化列表,因此它变为
public class TestClass {
List<String> list = new ArrayList<>();
public ArrayList<String> testMethodA() {
list.add("string1");
list.add("string2");
list.add("string3");
list.add("string4");
list.add("string5");
return list;
}
}
有没有办法根据ArrayList
,ArrayList<Object>
,...的类型将退货类型从obj1
更改为obj2
?例如,如果添加到列表中的内容属于String
类型,那么是否可以动态地将返回值从ArrayList
更改为ArrayList<String>
?
我正在使用Eclipse,所以如果有一个插件(或脚本或其他东西)可以帮助我这样做,那将非常感激。
如果没有“自动”方式,这意味着手动修复5-6天,我宁愿避免。
答案 0 :(得分:0)
我怀疑这正是你想要的,但你可以用泛型来做:
public static List<T> testMethodA(T... objs) {
return Arrays.stream(objs).collect(Collectors.toList());
}
您只能在一个List中有一个类型,这将由传入的对象类型决定。如果您特别希望类包含此列表,您可以尝试:
public class TestClass<T> {
List<T> list = new ArrayList<>();
public List<T> testMethodA(T... obj)
...
}
但是,在创建对象实例后,您将无法更改类型。但是,每个实例可以有不同的类型。
答案 1 :(得分:0)
是的,您可以使用泛型。
public <T> List<T> someGenericListMethod(T[] objs){
List<T> lObj = new ArrayList<T>();
for(int i=0; i<objs.length;++i)
lObj.add(objs[i]);
return lObj;
}
答案 2 :(得分:0)
在java编辑器中:右键单击&gt; 重构&gt; 推断通用类型参数...
查看Eclipse的“推断通用类型参数”重构的文档:http://help.eclipse.org/kepler/index.jsp?topic=/org.eclipse.jdt.doc.user/reference/ref-menu-refactor.htm
另请参阅此前一个stackoverflow问题:How to use "Infer Generic Type Arguments..." in Eclipse