我长期以来使用反射将模块与“处理程序”分离.
我有一个这样设计的代码库:
static enum AnimalHandlers {
Dog(Dog.class),
Cat(Cat.class);
private final Class c;
AnimalHandlers(Class class)
{
this.c=class;
}
public Class getAnimalHandler()
{
return c;
}
}
然后,在我的代码的后面,我有一个方法将“动物”枚举作为输入并使用反射(即,它从枚举中获取类并调用“ newInstance”)来调用必要的处理程序.
我认为,使用Guice解决方案会更干净.如何摆脱枚举/反射,仅使用guice通过特定于域的逻辑处理程序来“控制”我的控制模块?
解决方法:
您可以很好地使用MapBinder< AnimalEnum,AnimalHandler> ;,并为每个可能的AnimalEnum值定义一个绑定.