根据列表中对象的类型更改方法的返回类型

时间:2016-09-02 05:40:08

标签: java eclipse refactoring automated-refactoring

我想将我的代码从非类型对象重构为类型化对象。

例如,这是我当前的代码:

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;
    }
}

有没有办法根据ArrayListArrayList<Object>,...的类型将退货类型从obj1更改为obj2?例如,如果添加到列表中的内容属于String类型,那么是否可以动态地将返回值从ArrayList更改为ArrayList<String>

我正在使用Eclipse,所以如果有一个插件(或脚本或其他东西)可以帮助我这样做,那将非常感激。

如果没有“自动”方式,这意味着手动修复5-6天,我宁愿避免。

3 个答案:

答案 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