致电" main"存在于另一个类中,很容易说:
otherClass.main(stringArgs);
除了以静态方式调用它之外,首先使用反射来获取类然后调用方法的原因是什么?
答案 0 :(得分: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" });
答案 1 :(得分:1)
我不知道为什么你这样做。我从来不需要以这种方式调用另一个主要方法,除非我做了一些hacky或实验。
但通常你会使用反射调用方法,而不是在你不熟悉你正在调用的类时,或者在你搜索和调用标注注释的方法时直接调用它。
这就是反思的意思。
答案 2 :(得分:1)
使用反射的原因有很多。但是如果你有一个类的实例(或者如果我们讨论静态方法的类的名称)并且知道你想要调用的方法的名称(在编译时),你不应该使用反射
举个例子,使用反射的一个原因是,出于某种原因,如果您有String
包含方法名称(假设您是从用户那里得到的),并且想要调用此方法特定的课程。您显然不能只说otherClass.methodName
,因为methodName
会因用户输入的内容而有所不同。
答案 3 :(得分:1)
在大多数需要调用main
的用例中,它是在构建时不知道类的上下文中,并且可能甚至不在代码库内部进行调用。这可能是您经常目睹main
的反思性调用的原因。
事实上,静态调用main
毫无意义。