将对象转换为其原始类

时间:2013-04-28 20:01:16

标签: java casting

为避免这样做:

if (obj instanceof Class) {
    someHandlingMethod((Class) obj);
}
else if (obj instanceof AnotherClass) {
    someHandlingMethod((AnotherClass) obj);
}

是否可以按obj.getClass().getName()

的说明自动将对象强制转换为已知类

其次,它是否整洁可靠?或者使用“责任链”或“处理程序”模式会更好吗?

对于上下文:

我程序中收到的对象是从通过网络传输的ObjectInputStream读取的对象。收到的所有对象都是'Message'类型,然后我有几个消息类型的子类(例如AuthenticateRequest,ViewRequest)。我想以不同的方式处理这些问题。

3 个答案:

答案 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)

这是访客模式的工作。太知名了,需要在这里解释。参见四人帮书或维基百科。