-1

已编辑

我有一个未知的类,只有名为 namo 的字符串变量知道,它有一个名为paintah的方法,带有Graphics g参数。现在我正在尝试做:

Class.forName(namo).getMethod("paintah", ??????????);    

问号用什么代替?我试图弄清楚几个小时。

另外,如果我使用相同的类和相同的代码(但只有我知道它的名字Classo),如下所示:

new Classo.paintah(g);    

有用。

更新 好的,所以我有两个类,一个有这部分代码:

public static Classo cla = new Classo();
 public void paintComponent(Graphics g){
       Class.forName(namo).getMethod("paintah", Graphics.class); //not working
       cla.paintah(g); // working
}

这就是说主类,现在与未知类具有相同代码的Classo具有这部分代码:

public void paintah(Graphics g){
       g.fillRect(20,20,200,200);
}

所以,是的,我希望这能提供一个更好的主意..

4

3 回答 3

4

您正在使用的getMethod方法接受Class代表目标方法中参数类型的对象的 varargs 参数。

如果它只需要一个Graphics对象,则提供Graphics.class

Class.forName("bla").getMethod("paintah", Graphics.class);

由于您知道类名,因此您甚至不需要Class.forName,您可以使用类文字来访问它。

bla.class.getMethod("paintah", Graphics.class);

无论哪种方式,您都需要捕获从调用Exceptions中抛出的那些:getMethod

抛出:

NoSuchMethodException - 如果找不到匹配的方法或者名称是“”或“”。NullPointerException - 如果名称为 null SecurityException - 如果存在安全管理器 s 并且满足以下任何条件:

  • 调用 s.checkMemberAccess(this, Member.PUBLIC) 拒绝访问该方法

  • 调用者的类加载器与当前类的类加载器不同或其祖先,并且调用 s.checkPackageAccess() 拒绝访问此类的包

于 2013-07-22T17:20:33.150 回答
0

如果您有以下课程:

public class MyClass
{
   public void MyMethod(MyParameterType param);
}

然后你可以像这样得到方法对象:

Class.forName("MyClass").getMethod("MyMethod", MyParameterType.class);

getMethod() javadoc:

name 参数是一个字符串,指定简单名称
所需的方法。parameterTypes 参数是一个数组
标识方法的形式参数类型的类对象,
按照宣布的顺序。如果 parameterTypes 为空,
它被视为一个空数组。
于 2013-07-22T17:30:53.710 回答
0

一旦你得到你需要调用它的方法。这里有一个解释:call static method given a class object in java

于 2020-08-28T14:31:34.327 回答