我有一组我调用的方法和一个主处理程序,如下所示:
public class MyHander
{
HashMap<String, Method> methodMap = ...;
static {
... fill the methodMap by looking up local methods
methodMap.put("typeA", findMethod("handleTypeA"));
.... etc.
}
public void handle(MyObject obj) {
Method handler = methodMap.get(obj.getType());
handler.invoke(.....);
}
private handleTypeA() {
....
}
private handleTypeB() {
....
}
}
所以我通常会调用我的各个处理程序方法。我可以通过注释方法handleTypeA(),handleTypeB()等然后在我的主handle()方法中找到正确的方法来做类似的事情吗?
答案 0 :(得分:1)
是的,您可以为处理程序方法创建一个注释,列出它们接受的类型,并创建一个类来处理它们并返回一个处理程序映射。这会将静态初始化程序中容易出错的代码移动到可测试的工厂类中。
public class MyHander
{
HashMap<String, Method> methodMap = HandlerType.buildMap(MyHandler.class);
public void handle(MyObject obj) {
Method handler = methodMap.get(obj.getType());
handler.invoke(.....);
}
@HandlerType({"typeA", "typeAprime"})
private handleTypeA() {
....
}
@HandlerType({"typeB"})
private handleTypeB() {
....
}
}
HandlerType.buildMap
会使用反射来处理注释。您需要确保可以将数组作为默认注释参数传递,或者做一些聪明的事情,比如将其编码为逗号分隔的字符串。