为避免这样做:
if (obj instanceof Class) {
someHandlingMethod((Class) obj);
}
else if (obj instanceof AnotherClass) {
someHandlingMethod((AnotherClass) obj);
}
是否可以按obj.getClass().getName()
?
其次,它是否整洁可靠?或者使用“责任链”或“处理程序”模式会更好吗?
我程序中收到的对象是从通过网络传输的ObjectInputStream读取的对象。收到的所有对象都是'Message'类型,然后我有几个消息类型的子类(例如AuthenticateRequest,ViewRequest)。我想以不同的方式处理这些问题。
答案 0 :(得分:6)
您尝试执行的操作称为动态调用。你最接近的是使用反射。
Method method = getClass().getMethod("someHandlingMethod", obj.getClass());
method.invoke(this, obj);
答案 1 :(得分:1)
您可以使用Class对象具有的cast
方法:
Class clazz = obj.getClass();
clazz.cast(obj);
另一种选择:如果您有权访问someHandlingMethod
代码,则可以添加Class
类型的参数,并将obj.getClass()
传递给它。
public void someHandlingMethod(...., Class clazz);
public void someHandlingMethod(...., AnotherClass clazz);
您不需要使用此参数。这将允许您调用correcto重载。
答案 2 :(得分:1)
这是访客模式的工作。太知名了,需要在这里解释。参见四人帮书或维基百科。