如何在Android Studio中使用带有方法'getDeclaredConstructor'的扩展类的构造函数实例化类类型的类

时间:2017-04-23 15:28:52

标签: java class android-studio enums

public class MainMenu extends GameMenu{

Table table;

Skin skin;

public MainMenu(){super();};

protected void loadWidgets(){

    skin.add("playButton", com.mygdx.game.LIBGDXwrapper.gameGUI.widgets.MainMenuWidgets.loadPlayButton(table));
    table.row();
    skin.add("hightScoreButton", com.mygdx.game.LIBGDXwrapper.gameGUI.widgets.MainMenuWidgets.loadHighScoreButton(table));
    //table.row();
}

protected void loadInputlisteners(){
    skin.get("playButton", Button.class);

}

@Override
public String toString(){
    return "Menu";
}
}





public abstract class GameMenu extends Stage{

private Settings gameSettings;

//public GameMenu(Settings gameSettings){
 //   this.gameSettings = gameSettings;
//}

public GameMenu(){};

protected abstract void loadWidgets();

protected abstract void loadInputlisteners();

}



private static enum GameMenus {MainMenu(MainMenu.class);
    private final Class<? extends GameMenu> menuType;

    GameMenus(Class<? extends GameMenu> menuType){
        this.menuType = menuType;
    }

    public Class<? extends GameMenu> createInstance(Settings gameSettings){
        GameMenu gui = menuType.getDeclaredConstructor().newInstance();
    }
};

我一直试图让这项工作工作几个小时,是否有可能从'GameMenu'获取一个派生类的实例,类类型为'Class&lt; ?扩展GameMenu&gt;'?请注意,'GameMenu'的所有派生类都有一个带有一个参数'Settings'的构造函数。

我从方法'getDeclaredConstructor'获得NoSuchMethodExpection。

如果有人能帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:0)

所以你说:

  

请注意,'GameMenu'的所有派生类都有一个带有一个参数'Settings'的构造函数。

但你使用:

menuType.getDeclaredConstructor()

如果您查看the javadoc,您会看到getDeclaredConstructor()返回“no args”构造函数(如果有的话)。 您可能希望指定构造函数参数类型:

menuType.getDeclaredConstructor(Settings.class)