public Gameplay instantiateGameplay(Class<? extends Gameplay> clazz) {
try {
Constructor<? extends Gameplay> constructor;
constructor = clazz.getConstructor(new Class<?>[] { Game.class } );
return constructor.newInstance(new Object[] { this });
} catch (Exception e) {
Log.e(TAG, "Instantiate gameplay '" + clazz.getSimpleName() + "' failed.", e);
throw new RuntimeException(e);
}
}
通常,当我们实例化一个新类时,构造函数位于类文件中。什么是clazz.getConstructor(new Class [] {Game.class})的东西?看起来很奇怪。是什么原因?
答案 0 :(得分:1)
工作中是java反射。
答案 1 :(得分:1)
这是使用java反射API获取有关仅在运行时可用的类/对象的信息。特别是,该方法将声明的参数作为从GamePlay扩展的任何对象的泛型类型。由于许多类中的一个可以在运行时传入代码
constructor = clazz.getConstructor(new Class<?>[] { Game.class } );
return constructor.newInstance(new Object[] { this });
抓取传入的实际参数的构造函数,并使用它创建对象的新实例。