我如何使用通过class.forname(string)获得的类方法



我需要使用我通过class.forname((方法获得的类中的方法。我给你一个例子:

public class Greeter {
    public String getGreeting() {
        return "Hello World!";
    }
}

现在,我想使用字符串动态获取此类,并使用它的方法这样:

Class c = Class.forName("Greeter");
System.out.println(c.getGreeting());

现在这显然不起作用,因为Java还不将课程识别为迎宾班。我将如何去做这件事,而不必硬编码这是一个问候者类的事实?

不是直接,您需要Class的实例才能调用该方法。例如,

Class<?> cls = Class.forName("Greeter");
try {
    Object o = cls.getConstructor(null).newInstance(null);
    System.out.println(((Greeter) o).getGreeting());
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

您在评论中提到您不"知道"这是Greeter。您应该将其编程到一个常见的界面,但未能通过;也可以按名称获取该方法。例如,

Object o = cls.getConstructor(null).newInstance(null);
Method m = cls.getMethod("getGreeting", null);
System.out.println(m.invoke(o, null));

如果要使用类的方法而不知道compile时类是什么,则可以使用反射:

Class<?> clazz = Class.forName("Greeter");
Object obj = clazz.getConstructor().newInstance(); // Use default constructor 
Method method = clazz.getMethod("methodName",<array of class objects representing argument types>);
Object result = method.invoke(obj,<array of arguments>);

但是,正如第一个答案中指出的那样,最好使用常见接口而不是反射。


编辑:看起来其他答案击败了我。

相关内容

最新更新