Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建存储在列表中的类实例_Java_Reflection_Instance - Fatal编程技术网

Java 创建存储在列表中的类实例

Java 创建存储在列表中的类实例,java,reflection,instance,Java,Reflection,Instance,首先,我制作一个ArrayList。(?意味着我不知道应该有什么,继续阅读) 如何才能真正做到这一点?您需要存储字符串类名,然后使用反射创建实例,假设您要使用的是反射: List<String> arrayList = new ArrayList<>(); arrayList.add("fully.qualified.ExtendedClass1"); arrayList.add("fully.qualified.ClassExtended2"); List array

首先,我制作一个
ArrayList
。(
意味着我不知道应该有什么,继续阅读)


如何才能真正做到这一点?

您需要存储
字符串
类名,然后使用反射创建实例,假设您要使用的是反射:

List<String> arrayList = new ArrayList<>();
arrayList.add("fully.qualified.ExtendedClass1");
arrayList.add("fully.qualified.ClassExtended2");
List arrayList=new arrayList();
add(“fully.qualified.ExtendedClass1”);
add(“fully.qualified.ClassExtended2”);
然后,在你的循环中:

for(int i = 0; i < arrayList.size(); i++) {
    Class<?> cls = Class.forName(arrayList.get(i)); //Get class for the name

    Object instance = cls.newInstance();
    ...
}
for(int i=0;i
您需要存储
字符串
类名,然后使用反射创建实例,假设您要使用的是反射:

List<String> arrayList = new ArrayList<>();
arrayList.add("fully.qualified.ExtendedClass1");
arrayList.add("fully.qualified.ClassExtended2");
List arrayList=new arrayList();
add(“fully.qualified.ExtendedClass1”);
add(“fully.qualified.ClassExtended2”);
然后,在你的循环中:

for(int i = 0; i < arrayList.size(); i++) {
    Class<?> cls = Class.forName(arrayList.get(i)); //Get class for the name

    Object instance = cls.newInstance();
    ...
}
for(int i=0;i
因此,当arrayList包含该类的对象时,迭代时可以“gardens.get(i).getClass().newInstance();”执行该操作?您希望在列表中存储什么?名字?为什么不是字符串列表?上课?为什么不列一个类的列表呢?你想创建未知类的实例,我说的对吗?总的来说,这并不容易。您应该将类限制为某些基或接口,提供一个已知的方法来调用创建实例(或预定义的构造函数签名)。然而,我很有可能你在这里有一个更好的解决方案来达到最初的目标。所以请告诉我们你到底需要什么。目前这个问题还不太清楚。所以当arrayList包含该类的对象时,迭代时可以“gardens.get(i).getClass().newInstance();”这样做?您希望在列表中存储什么?名字?为什么不是字符串列表?上课?为什么不列一个类的列表呢?你想创建未知类的实例,我说的对吗?总的来说,这并不容易。您应该将类限制为某些基或接口,提供一个已知的方法来调用创建实例(或预定义的构造函数签名)。然而,我很有可能你在这里有一个更好的解决方案来达到最初的目标。所以请告诉我们你到底需要什么。目前这个问题有点不清楚。值得记住的是类加载问题,以及如何处理未找到的类,以及默认构造函数并不总是可用的事实。通过定义基类、已知构造函数签名或声明某些
getInstance
方法的接口,可以限制该问题。然而,我认为我们这里实际上有一个XY问题。@diginoise 100%,我甚至没有处理检查过的异常,但所有这些都适用。@Zabuza“反射”在这个答案中是假设的,如前所述。值得记住的是类加载问题,以及如何处理未找到的类,以及默认构造函数并不总是可用的事实。通过定义基类、已知构造函数签名或声明某些
getInstance
方法的接口,可以限制该问题。然而,我认为我们这里实际上有一个XY问题。@diginoise 100%,我甚至没有处理检查过的异常,但所有这些都适用。@Zabuza“反射”在这个答案中假设,如前所述。