在编译时未知类名时调用方法

时间:2011-05-02 20:47:41

标签: java android

我有许多子游戏,SubGame1,SubGame2等。每个子游戏都是从SubGame类派生而来,实现了一个静态的String getDescription()函数。

我想访问这些说明,例如SubGame1.getDescription(),SubGame2.getDescription()等。

但是我想使用代码循环,并不是所有的子游戏都存在。

当我只知道游戏编号时,如何为子游戏调用getDescription()。类似的东西:

String description = Class.forName(this.getPackageName()+".SubGame"+subGameNo.getDescription();

但是返回:     方法getDescription()未定义类型Class<捕获#5-of?>

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您可以调用它,但必须通过java.lang.reflect类来完成。 Class.forName为您提供Class个实例。然后,您拨打getMethod以获取Method,然后您可以拨打invoke

脱离我的头顶:

Class cls;
Method getDescription;
String description;

cls = Class.forName(this.getPackageName() + ".SubGame" + subGameNo);
getDescription = cls.getMethod("getDescription");
description = getDescription.invoke(null);

...但你可能需要稍微玩一下args。

答案 1 :(得分:2)

您可以使用Class.forName()来获取类的实例。

然后你可以使用反射来调用方法。代码看起来像这样

Class<?> clazz = Class.forName(this.getPackageName()+".SubGame"+subGameNo);
Method descriptionMethod = clazz.getMethod("getDescription", new Class[] {});
String value = (String) descriptionMethod .invoke(this, new Object[] {}); 

答案 2 :(得分:0)

您可以创建游戏编号地图到游戏说明(map.put(1, SubGame1.getDescription()),然后根据需要从地图中获取说明。它并不像你想要的那样动态,但它会起作用。