了解以下关于构造函数的android代码

时间:2012-01-26 20:19:55

标签: java

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})的东西?看起来很奇怪。是什么原因?

2 个答案:

答案 0 :(得分:1)

工作中是java反射。

答案 1 :(得分:1)

这是使用java反射API获取有关仅在运行时可用的类/对象的信息。特别是,该方法将声明的参数作为从GamePlay扩展的任何对象的泛型类型。由于许多类中的一个可以在运行时传入代码

constructor = clazz.getConstructor(new Class<?>[] { Game.class } );
        return constructor.newInstance(new Object[] { this });

抓取传入的实际参数的构造函数,并使用它创建对象的新实例。