2 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
不是直接的,你需要一個(gè)實(shí)例Class
來調(diào)用方法。例如,
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();}
你在評(píng)論中提到你不“知道”它是一個(gè)Greeter
。你應(yīng)該編程到一個(gè)通用的接口,但失敗了; 也可以按名稱獲取方法。例如,
Object o = cls.getConstructor(null).newInstance(null);Method m = cls.getMethod("getGreeting", null);System.out.println(m.invoke(o, null));

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果要在不知道編譯時(shí)類的內(nèi)容的情況下使用類的方法,可以使用反射:
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>);
但是,如第一個(gè)答案中所述,最好使用通用接口而不是反射。
編輯:看起來像另一個(gè)答案擊敗了我的拳頭。
添加回答
舉報(bào)