假设我们在内部有一个名为Figure
的抽象类和一个静态方法addFigure
。 addFigure
应使用用户指定类型的对象填充现有列表。
public abstract class AbstractFigure {
public static <T extends AbstractFigure> void addFigure(List<T> list, Class<T> clazz, int n)
{
for (int i = 0; i < n; i++) {
try {
T obj = clazz.newInstance();
list.add(obj);
} catch (InstantiationException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
}
}
然后我们有一个子类Square
。
public class Square extends AbstractFigure {
}
调用如下:
public class GenericsProblem{
public static void main(String[] args) {
ArrayList<Square> arrayListSquare = new ArrayList<>();
AbstractFigure.addFigure(arrayListSquare, Square.class, 12);
}
}
代码正常工作,列表中填充了Squares
,正如我所假设的那样。
现在,我想重新制作AbstractFigure
,而不是在现有列表上工作,它会创建并返回一个,如:
public abstract class AbstractFigure {
public static <T extends AbstractFigure> List<T> addFigure(Class<T> clazz, int n)
{
List<T> genList = new ArrayList<>();
for (int i = 0; i < n; i++) {
try {
T obj = clazz.newInstance();
genList.add(obj);
} catch (InstantiationException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
return genList;
}
}
这是否可能,如果是这样,我怎么能调用它?
答案 0 :(得分:1)
是的,有可能。您只需将返回值分配给变量。
List<Square> arrayListSquare = addFigure(Square.class, 12);