Gre*_*rch 5 java reflection class arraylist
我需要编写一个java方法,它接受一个类(不是一个对象),然后用该类创建一个ArrayList作为数组中每个成员的元素.伪代码示例:
public void insertData(String className, String fileName) {
ArrayList<className> newList = new ArrayList<className>();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Java中实现这一目标?
您可以使用泛型方法
public <T> void insertData(Class<T> clazz, String fileName) {
List<T> newList = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)
但是如果你应该使用这个契约insertData(String className, String fileName),你就不能使用泛型,因为 Java 无法在编译时解析列表项的类型。
在这种情况下,您根本不能使用泛型并在将其放入列表之前使用反射来检查类型:
public void insertData(String className, String fileName) {
List newList = new ArrayList();
Class clazz;
try {
clazz = Class.forName(className);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e); // provide proper handling of ClassNotFoundException
}
Object a1 = getSomeObjectFromSomewhere();
if (clazz.isInstance(a1)) {
newList.add(a1);
}
// some additional code
}
Run Code Online (Sandbox Code Playgroud)
但是如果没有类的信息,您就可以使用,Object因为您无法在代码中将对象强制转换为 UnknownClass。