2012-01-26 5 views
-2
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 (новый класс [] {Game.class}) вещь? Это выглядит странно. В чем причина?понять следующий код для Android о конструкторе

ответ

1

Использование API отображения java для получения информации о классах/объектах, доступных только во время выполнения. В частности, метод принимает аргумент, объявленный как общий тип любого объекта, который простирается от GamePlay. Так как один из многих классов может быть принят в, во время выполнения, код

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

хватается конструктора для фактического аргумента, переданного в и создает новый экземпляр объекта с ним.

Смежные вопросы