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