我正在使用反射来调用不同类的方法,这些方法在功能方面是无关的,但在操作方面是相关的。因此,我必须传递这些类的对象来调用方法,但是如何将对象存储在同一个变量中呢?
Method target;
if (handlerType.equals("database")){
target = DatabaseRequestHandler.class.getMethod(method, Args.class);
} else if (handlerType.equals("document")){
target = DocumentRequestHandler.class.getMethod(method, Args.class);
} else if (handlerType.equals("dictionary")){
target = DictionaryRequestHandler.class.getMethod(method, Args.class);
} else {
throw new IllegalArgumentException("Handler not implemented for this call");
}
//Method target = RequestHandler.class.getMethod(method, Args.class);
if (target.getReturnType().equals(Void.TYPE)) {
target.invoke(requestHandler, args);
} else {
Object result = target.invoke(requestHandler, args);
body = ValueSerializer.serialize(result, memory);
}
我应该如何声明requestHandler变量,以便我可以存储DatabaseHandler,DocumentHandler和DictionaryHandler的对象?所有这些类都没有相互关联,因此没有必要使用它们继承。我来自Python背景,所以真的不知道如何实现这一点。
答案 0 :(得分:1)
Method.invoke
接受Object
要使用的实例。因此,您可以简单地声明Object
或(更好)公共类/接口(如果可用)。
MyHandler requestHandler ...
或
Object requestHandler ....
仅供参考:
答案 1 :(得分:0)
我使用以下方法创建对象。
Object requestHandler = null;
Method target;
if (handlerType.equals("
target = DatabaseRequestHandler.class.getMethod(method, Args.class);
requestHandler = new DatabaseRequestHandler();
} else if (handlerType.equals("document")){
target = DocumentRequestHandler.class.getMethod(method, Args.class);
requestHandler = new
} else if (handlerType.equals("dictionary")){
target = DictionaryRequestHandler.class.getMethod(method, Args.class);
requestHandler = new DictionaryRequestHandler();
} else {
throw new IllegalArgumentException("Handler not implemented for this call");
}
if (target.getReturnType().equals(Void.TYPE)) {
target.invoke(requestHandler, args);
} else {
Object result = target.invoke(requestHandler, args);
body = ValueSerializer.serialize(result, memory);
}