Java Arraylist。使用泛型和通配符创建可重用的方法

Java Arraylist。使用泛型和通配符创建可重用的方法,java,android,Java,Android,我正在创建一个返回数组列表的可重用方法 以下是我正在努力实现的目标 public List<?> getReusable(String method) { List<?> mResuableList = new ArrayList<>(); switch (method) { case METHOD_1: mResuableList.add(new TypeOne("TypeOne","TypeOneID"))

我正在创建一个返回数组列表的可重用方法

以下是我正在努力实现的目标

public List<?> getReusable(String method) {

    List<?> mResuableList = new ArrayList<>();

    switch (method) {
    case METHOD_1:
        mResuableList.add(new TypeOne("TypeOne","TypeOneID"))
        break;
    case METHOD_2:
        mResuableList.add(new TypeTwo("TypeTwo","TypeTwoID",1234,true));
        break;
    default:
        break;
    }
    return mResuableList;
}
public List getreusible(字符串方法){
List mResuableList=新建ArrayList();
开关(方法){
案例方法1:
添加(新的TypeOne(“TypeOne”,“TypeOneID”))
打破
案例方法2:
添加(新的TypeTwo(“TypeTwo”,“TypeTwoID”,1234,true));
打破
违约:
打破
}
返回mResuableList;
}

请告诉我是否可以做到这一点。

如果您希望您的列表能够容纳类型为
TypeOne
TypeTwo
的对象,我将创建一个接口并让这两个类实现它:

public interface Interface {}

public class TypeOne implements Interface {/*class specifications here*/}

public class TypeTwo implements Interface {/*class specifications here*/}
然后您可以将它们都添加到您的
列表中

List mResuableList=new ArrayList();
添加(新的TypeOne(“TypeOne”、“TypeOneID”);
添加(新的TypeTwo(“TypeTwo”,“TypeTwoID”,1234,true));
List mResuableList=new ArrayList()

将以上代码行替换为

List mResuableList=new ArrayList()

这将符合你的目的

注意:更好的编程实践是更加具体。

尝试以下方法:

public abstract class TypeBase {

}

public class TypeOne extends TypeBase {
    public TypeOne(String val1, String val2) {
        // TODO Auto-generated constructor stub
    }
}

public class TypeTwo extends TypeBase {
    public TypeTwo(String val1, String val2, int val3, boolean val4) {
        // TODO Auto-generated constructor stub
    }
}

public <T extends TypeBase> List<T> getReusable(int method) {
    List<T> mResuableList = new ArrayList<T>();
    switch (method) {
    case 1:
        mResuableList.add((T) new TypeOne("TypeOne", "TypeOneID"));
        break;
    case 2:
        mResuableList.add((T) new TypeTwo("TypeTwo", "TypeTwoID", 1234, true));
        break;
    default:
        break;
    }
    return mResuableList;
}

public class UsingClass{
    public void callReusable(){
        List<TypeOne> lstOne = getReusable(1);
        List<TypeTwo> lstTwo = getReusable(2);
    }
}
公共抽象类类型库{
}
公共类TypeOne扩展了TypeBase{
公共TypeOne(字符串val1、字符串val2){
//TODO自动生成的构造函数存根
}
}
公共类TypeTwo扩展了TypeBase{
公共类型二(字符串val1、字符串val2、int val3、布尔值val4){
//TODO自动生成的构造函数存根
}
}
公共列表可重用(int方法){
List mResuableList=新建ArrayList();
开关(方法){
案例1:
添加((T)新的TypeOne(“TypeOne”、“TypeOneID”);
打破
案例2:
添加((T)新的TypeTwo(“TypeTwo”,“TypeTwoID”,1234,true));
打破
违约:
打破
}
返回mResuableList;
}
使用类的公共类{
public void callrepublicate(){
List lstOne=GetReusables(1);
列表lstwo=getreusible(2);
}
}

您是否试图将不同对象的“类型”(即类)添加到
ArrayList
??你不能那样做。在我看来,您的
ArrayList
必须是
T扩展类型
其中
TypeOne扩展类型
TypeTwo扩展类型
(无论
类型
类是什么)。不清楚您试图实现什么。你想使返回类型安全吗?@Thilo好了,我创建了这个方法来返回存在于各种数据库表中的数据。因此,我可以通过更改参数反复使用相同的方法。
public abstract class TypeBase {

}

public class TypeOne extends TypeBase {
    public TypeOne(String val1, String val2) {
        // TODO Auto-generated constructor stub
    }
}

public class TypeTwo extends TypeBase {
    public TypeTwo(String val1, String val2, int val3, boolean val4) {
        // TODO Auto-generated constructor stub
    }
}

public <T extends TypeBase> List<T> getReusable(int method) {
    List<T> mResuableList = new ArrayList<T>();
    switch (method) {
    case 1:
        mResuableList.add((T) new TypeOne("TypeOne", "TypeOneID"));
        break;
    case 2:
        mResuableList.add((T) new TypeTwo("TypeTwo", "TypeTwoID", 1234, true));
        break;
    default:
        break;
    }
    return mResuableList;
}

public class UsingClass{
    public void callReusable(){
        List<TypeOne> lstOne = getReusable(1);
        List<TypeTwo> lstTwo = getReusable(2);
    }
}