何时调用main而不是调用main



当调用另一个类中存在的"main"时,很容易说:

 otherClass.main(stringArgs);

首先使用反射来获取类,然后调用方法,而不是以静态方式调用它,这背后的原因是什么?

原因可能是,如果使用反射,则不需要对调用其main方法的类具有编译时依赖关系。您可以使用Class.forName(...)动态加载类,然后使用反射找到main方法并调用它

String name = "com.mycompany.MyMainClass";
// Load the class dynamically
Class<?> mainClass = Class.forName(name);
// Find the 'main' method that takes a string array
Method mainMethod = mainClass.getMethod("main", new Class<?>[] { String[].class });
// Invoke the method; first arg is null, because the method is static
mainMethod.invoke(null, new String[] { "one", "two" });

我不知道你为什么要这么做。我从来没有需要用这种方式调用另一个主要方法,除非我在做一些棘手的或实验。

但通常情况下,当您对正在调用的类了解不够时,或者当您搜索和调用标有注释的方法时,您会使用反射来调用方法,而不是直接调用它。

这就是反思的意义所在。

使用反射有很多原因。但是,如果您有一个类的实例(如果我们谈论的是静态方法,则为类的名称),并且知道要调用的方法的名称(在编译时),则不应该使用反射。

举个例子,使用反射的一个原因是,如果出于某种原因,您有一个包含方法名的String(假设您是从用户那里得到的),并且想要调用特定类的此方法。显然不能只说otherClass.methodName,因为methodName会根据用户输入的内容而有所不同。

在大多数需要调用main的用例中,它是在构建时不知道类的上下文中,甚至可能不在进行调用的代码库中。这可能就是为什么你最经常看到main的反思性呼叫的原因。

实际上,静态地调用main没有什么意义。

相关内容

  • 没有找到相关文章