gpt4 book ai didi

java - 如何调用接口(interface)的特定实现类

转载 作者:行者123 更新时间:2023-11-30 06:21:15 25 4
gpt4 key购买 nike

我尝试完成的是调用特定类的接口(interface)。
我使用枚举来填充 .class 并获取该类的接口(interface)。
那么如何返回接口(interface)呢?
如果可能,我想避免反射。

提前致谢。

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
}
}

澄清:主要目标是访问 MineSweeper 和 Mario 类的 Start() 和 Stop() 方法。
用法应该类似于:MINESWEEPER.getGameInterface().start()但是此时此刻,我不知道在了解 .class 的情况下获取接口(interface)的可靠解决方案。

最佳答案

一个更好的主意:

  1. 为您类(class)的每个游戏实现GameInterface,并暗示您选择的名称。
  2. 使用抽象函数 createGame 声明 enum 并返回您期望实现此 createGame 的 Game 类的实例每个 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();
    }

如果你打算使用单例模式,虽然我不能确定你的问题,但正如@GaborSch 所建议的那样:你可以在 中使用 MineSweeper.getInstance() 函数>createGame()enum 常量。然而,尝试考虑在实现 Singleton 时也使用 enum,正如 Effective Java 书中的建议和详细解释。

关于java - 如何调用接口(interface)的特定实现类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20777349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com