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