Java 是否可以在不将类实例化为实际对象的情况下创建类列表?

Java 是否可以在不将类实例化为实际对象的情况下创建类列表?,java,Java,我的程序中有一组可以实例化的类。每个类都有一个与之关联的静态方法,该方法更新该类的特定方面 在运行时,程序选择使用集合中的许多类 然后,当程序运行时,这些类的多个版本被实例化为对象 在整个程序中,有一些关键点需要调用与各种类关联的静态方法,但只调用程序在运行时选择的正在使用的静态方法 我是否可以创建一个包含正在使用的类的列表/数组而不实例化它们?这样我就可以浏览这个列表并调用每个类的静态方法了 我发现的另一种方法是为使用中的每个类实例化一个对象,并将它们存储在数组中,然后从那里调用方法。这似乎有

我的程序中有一组可以实例化的类。每个类都有一个与之关联的静态方法,该方法更新该类的特定方面

在运行时,程序选择使用集合中的许多类

然后,当程序运行时,这些类的多个版本被实例化为对象

在整个程序中,有一些关键点需要调用与各种类关联的静态方法,但只调用程序在运行时选择的正在使用的静态方法

我是否可以创建一个包含正在使用的类的列表/数组而不实例化它们?这样我就可以浏览这个列表并调用每个类的静态方法了

我发现的另一种方法是为使用中的每个类实例化一个对象,并将它们存储在数组中,然后从那里调用方法。这似乎有点低效,也不是很优雅


非常感谢您的帮助。

我不知道您为什么要避免实例化,但是如果您只需要调用静态方法,那么就没有理由创建对象。至于你的问题,你可以毫无问题地创建一个类数组。请记住,MyClass.class实际上是class的对象,因此这将起作用:

Class[] classes = new Class[] {MyClass1.class, MyClass2.class};
然后,您可以使用您的逻辑来选择其中的一些。完成后,您可以使用反射实例化它们:

classes[0].newInstance();

希望有帮助,如果没有,请精确回答您的问题。请注意,将创建类对象本身(不确定您是否可以阻止类加载器加载它们)。

我不确定您为什么要避免实例化,但如果您只需要调用静态方法,则没有理由创建对象。至于你的问题,你可以毫无问题地创建一个类数组。请记住,MyClass.class实际上是class的对象,因此这将起作用:

Class[] classes = new Class[] {MyClass1.class, MyClass2.class};
然后,您可以使用您的逻辑来选择其中的一些。完成后,您可以使用反射实例化它们:

classes[0].newInstance();

希望有帮助,如果没有,请精确回答您的问题。请注意,将创建类对象本身(不确定是否可以阻止类加载器加载它们)。

您可以使用反射执行以下操作:

List <Class<?>> classes = new ArrayList<Class<?>>();

// alternatively, classes.add(com.foo.MyClass1.class);
classes.add(Class.forName("com.foo.MyClass1"));  
classes.add(Class.forName("com.foo.MyClass2"));
// ...etc

Method m = classes.get(0).getDeclaredMethod("staticFunction");
m.invoke(null); // pass in an instance of the class if this is an instance method
List>();
//或者,class.add(com.foo.MyClass1.class);
add(Class.forName(“com.foo.MyClass1”);
Class.add(Class.forName(“com.foo.MyClass2”);
//…等等
方法m=classes.get(0).getDeclaredMethod(“staticFunction”);
m、 调用(空);//如果该类是实例方法,则传入该类的实例

查看javadoc中的和。

您可以使用反射来执行以下操作:

List <Class<?>> classes = new ArrayList<Class<?>>();

// alternatively, classes.add(com.foo.MyClass1.class);
classes.add(Class.forName("com.foo.MyClass1"));  
classes.add(Class.forName("com.foo.MyClass2"));
// ...etc

Method m = classes.get(0).getDeclaredMethod("staticFunction");
m.invoke(null); // pass in an instance of the class if this is an instance method
List>();
//或者,class.add(com.foo.MyClass1.class);
add(Class.forName(“com.foo.MyClass1”);
Class.add(Class.forName(“com.foo.MyClass2”);
//…等等
方法m=classes.get(0).getDeclaredMethod(“staticFunction”);
m、 调用(空);//如果该类是实例方法,则传入该类的实例

查看javadoc中的和。

您可以有一个类对象列表,例如

List myClasses=new ArrayList()

要向列表中添加项目,您需要编写类似于
myClasses.add(Class1.class)的代码


这是存储类列表的一种方法,无需创建每个类的实例

您可以有一个类对象列表,例如

List myClasses=new ArrayList()

要向列表中添加项目,您需要编写类似于
myClasses.add(Class1.class)的代码


这是存储类列表的一种方法,无需创建每个类的实例

你不需要实例化一个类来调用它的静态方法…是的。我知道。但在我看来,如果不将类实例化为对象,就无法创建类列表。这就违背了我要做的事情。
list您不需要实例化一个类来调用它的静态方法……是的。我知道。但在我看来,如果不将类实例化为对象,就无法创建类列表。这违背了我要做的事情。
list我似乎找不到一个只接受字符的.getDeclaredMethod()。这是否应该包含我要调用的方法的名称?谢谢是您要查找的-
参数如果没有参数,则类型
是可选的。我似乎找不到仅接受字符的.getDeclaredMethod()。这是否应该包含我要调用的方法的名称?谢谢是您要查找的-
参数如果没有参数,则类型
是可选的