我正在尝试将以下方法变成通用方法,结果被击中了。
public static MyObject[] getObjectFromList(List<MyObject> inputList) {
if (inputList != null && inputList.size() > 0) {
return inputList.toArray(new MyObject[inputList.size()]);
} else {
inputList = new ArrayList<MyObject>();
MyObject obj = new MyObject();
inputList.add(obj);
return inputList.toArray(new MyObject[inputList.size()]);
}
}
还有另一个类似的方法,但它是 MyObject2
public static MyObject2[] getObjectFromList(List<MyObject2> inputList) {
if (inputList != null && inputList.size() > 0) {
return inputList.toArray(new MyObject2[inputList.size()]);
} else {
inputList = new ArrayList<MyObject2>();
MyObject2 obj = new MyObject2();
inputList.add(obj);
return inputList.toArray(new MyObject2[inputList.size()]);
}
}
我如何将它作为一个单一的方法来获取任何对象(myobject,myobject2)列表和 返回一个数组?
最佳答案
由于类型删除,您不能在不更改方法签名的情况下执行此操作。如果您可以传递一个标识所需类型的 Class
对象,您可以执行如下操作:
public static <T> T[] getObjectFromList(List<? extends T> inputList, Class<T> c) {
if (inputList == null || inputList.isEmpty()) {
inputList = new ArrayList<T>();
T obj = null;
try {
obj = c.newInstance();
} (Exception ex) {
throw new RuntimeException("Instantiation failed", ex);
}
inputList.add(obj);
}
return inputList.toArray(Array.newInstance(c, inputList.size()));
}
关于java - 关于泛型方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5178469/