在java中将多个集合函数合并到一个通用setter中

在java中将多个集合函数合并到一个通用setter中,java,reflection,Java,Reflection,我有一个具有以下公共方法的类: public void setStartGameEvent(GameTypeMode gameTypeMode) { gameTypeMode.setGameType(readIntFromConsole()); } @Override public void setComputerHeuristicEvent(GameTypeMode gameTypeMode) { gameTypeMode.se

我有一个具有以下公共方法的类:

    public void setStartGameEvent(GameTypeMode gameTypeMode) {
        gameTypeMode.setGameType(readIntFromConsole());
    }

    @Override
    public void setComputerHeuristicEvent(GameTypeMode gameTypeMode) {
        gameTypeMode.setComputerHeuristic(readIntFromConsole());
    }

    @Override
    public void setBackgroundChoice(GameTypeMode gameTypeMode) {
        gameTypeMode.setBackground(readIntFromConsole());
    }


    @Override
    public void setBorderChoice(GameTypeMode gameTypeMode) {
        gameTypeMode.setBorder(readIntFromConsole());
    }
注:

  • 该类是一个代理,这就是为什么函数的输入是我们想要设置数据的地方-该类是一个consoleEventHandler,主类执行eventHandler.setBlah(GameTypeMode)并从正确的输入方法获取数据

  • readIntFromConsole()只是从标准输入和handels异常中读取一个int

正如您很容易看到的那样,所有函数都在做完全相同的事情,只是设置了不同的属性。 我的问题是,是否有一种更通用\更复杂的方法,如反射或任何类似的方法

编辑:更多关于这个类的解释

这门课是游戏的一部分。 游戏的输入可以是控制台\图形显示\鼠标等。 输出(游戏本身)是根据所选择的输入法创建的

我有一个eventHandler接口,它定义了一个特定输入法应该实现的所有函数,这样游戏就可以运行了(比如上面的函数) 这意味着我有consoleEventHandler、graphicEventHandler


现在,对于每个属性,我需要为所有可用的eventHandler实现一个set方法(可能很多),这就是为什么我要问这个关于为每个eventHandler泛化set函数的问题,您提出的任何问题都将比所显示的显而易见的简单代码复杂


在这个抽象层次上,有了这些微不足道的“复制”,成本远远大于任何好处。

使用反射来解决这个“问题”就像使用原子弹来避免更换遥控器中的电池一样。如果它真的让您感到困扰,您可以看看Java对Calendar类做了什么,尽管您可能会再次要求更多的麻烦。为什么这个类的存在只是为了将调用传递给另一个类?它甚至让类调用传递到它!整个代码块都是完全冗余的…所以难怪它看起来是冗余的:如果你解释这个类存在的可能原因,我们可能会给你一个不那么疯狂的方法:Deven当我将来为每个属性添加时,我必须创建另一个setFunction(由于eventHandler接口->所有子类的缘故,实际上只有几个函数)?tnx@ShaiZarzewski几乎可以肯定是的。这更为复杂,因为不是每个方法都以相同的方式命名,所以无论如何都要检查任意数量的内容。Java没有“缺少方法”函数。如果您想要这种类型的抽象,Java不是最佳选择。您可能需要研究一些Apache Commons BeanUtils和/或PropertyUtils–它们有多种方法来定义从一个实例到另一个实例的信息传递。