0

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

 otherClass.main(stringArgs);

除了以静态方式调用它之外,首先使用反射获取类然后调用方法的原因是什么?

4

4 回答 4

4

一个原因可能是,如果您使用反射,则不需要对要调用其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" });
于 2013-08-01T14:26:36.583 回答
1

我不知道你为什么一直这样做。我从来不需要以这种方式调用另一个主要方法,除非我在做一些 hacky 或试验时。

但一般来说,当您对正在调用的类不够了解时,或者在搜索和调用标有注解的方法时,您使用反射来调用方法而不是直接调用它。

这就是反射的意义所在。

于 2013-08-01T14:24:34.383 回答
1

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

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

于 2013-08-01T14:28:41.017 回答
1

在大多数需要调用的用例中main,它是在构建时不知道类的上下文中,甚至可能不在代码库中进行调用。这可能是您最常目睹main.

事实上,main静态调用几乎没有意义。

于 2013-08-01T14:35:23.517 回答