我有许多子游戏,SubGame1,SubGame2等。每个子游戏都是从SubGame类派生而来,实现了一个静态的String getDescription()函数。
我想访问这些说明,例如SubGame1.getDescription(),SubGame2.getDescription()等。
但是我想使用代码循环,并不是所有的子游戏都存在。
当我只知道游戏编号时,如何为子游戏调用getDescription()。类似的东西:
String description = Class.forName(this.getPackageName()+".SubGame"+subGameNo.getDescription();
但是返回: 方法getDescription()未定义类型Class<捕获#5-of?>
有什么想法吗?
答案 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()
),然后根据需要从地图中获取说明。它并不像你想要的那样动态,但它会起作用。