如何调用接口的特定实现类

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.

Sag*_*age 5

一个更好的主意:

  1. GameInterface通过隐含您选择的名称实施您班级的每个游戏.
  2. 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书中详细解释的那样.