use*_*086 2 java enums interface class
我试图完成的是调用特定类的接口.
我使用Enum来填充.class并获取该类的接口.
那么我怎样才能返回界面呢?
如果可能的话,我想避免反思.
提前致谢.
public interface GameInterface {
void start();
void sop();
}
public enum Game{
MINESWEEPER(MineSweeper.class),
MARIO(Mario.class);
private Class c;
public Game(Class c) {
this.c = c;
}
public GameInterface getGameInterface() {
// return Interface of the class
// So I can call for instance MINESWEEPER.getGameInterface().start()
// At this momement I use return:
// ((GamemodeInterface)this.c.getDeclaredMethod("getInstance", new Class[0]).invoke(null, new Object[0]));
// *MineSweeper and Mario are Singleton, thats why getInstance
}
}
Run Code Online (Sandbox Code Playgroud)
澄清:主要目标是在MineSweeper和Mario类中访问Start()和Stop()方法.
用法应该是这样的:MINESWEEPER.getGameInterface().start()但是在这一刻我不知道一个可靠的解决方案让接口知道.class.
一个更好的主意:
GameInterface
通过隐含您选择的名称实施您班级的每个游戏.enum
使用抽象函数声明createGame
并返回您期望的Game类的实例,并将此createGame
函数的实现应用于每个enum
常量:
class MineSweeper implements GameInterface
{
// your code
}
class Mario implements GameInterface
{
// your code
}
public enum GameType
{
MINESWEEPER
{
public GameInterface createGame()
{
return new MineSweeper();
}
},
MARIO
{
public GameInterface createGame()
{
return new Mario();
}
}
public abstract GameInterface createGame();
}
Run Code Online (Sandbox Code Playgroud)如果你打算使用Singleton模式,虽然我不能从你的问题那么肯定,但作为@GaborSch曾建议:你可以利用MineSweeper.getInstance()
内部函数createGame()
的enum
常数.但是,尝试使用一段enum
时间来实现Singleton,正如Effective Java书中详细解释的那样.