Java 将对象强制转换为其原始类

Java 将对象强制转换为其原始类,java,casting,Java,Casting,要避免这样做,请执行以下操作: if (obj instanceof Class) { someHandlingMethod((Class) obj); } else if (obj instanceof AnotherClass) { someHandlingMethod((AnotherClass) obj); } 是否可以自动将对象强制转换为其已知类,如obj.getClass().getName()所述 其次,它整洁可靠吗?还是使用“责任链”或“处理者”模式更好 上下文

要避免这样做,请执行以下操作:

if (obj instanceof Class) {
    someHandlingMethod((Class) obj);
}
else if (obj instanceof AnotherClass) {
    someHandlingMethod((AnotherClass) obj);
}
是否可以自动将对象强制转换为其已知类,如
obj.getClass().getName()
所述

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

上下文:
在我的程序中接收的对象是从通过网络传输的ObjectInputStream读取的对象。所有接收到的对象都是“Message”类型的,那么我有几个消息类型的子类(比如AuthenticateRequest、ViewRequest)。我想以不同的方式处理这些问题。

您试图做的是动态调用。你能做的最接近的事情就是使用反射

Method method = getClass().getMethod("someHandlingMethod", obj.getClass());
method.invoke(this, obj);

您可以使用类对象具有的
cast
方法:

Class clazz = obj.getClass();
clazz.cast(obj);
另一个选项:如果您有权访问
someHandlingMethod
code,则可以添加
Class
类型的参数,并将
obj.getClass()
传递给它

public void someHandlingMethod(...., Class clazz);

public void someHandlingMethod(...., AnotherClass clazz);

您不需要使用此参数。这只允许您调用correcto重载。

这是访问者模式的作业。太有名了,不需要在这里解释。请参阅四人帮书籍或维基百科。

您尝试过泛型吗?我怀疑泛型会对我有所帮助-对于每种类型的对象,处理过程是不同的,因此我仍然必须检查每个对象的类型。您不能强制转换到仅由字符串值(即,
obj.getClass().getName()
)知道的类。与
if…else
测试的
实例链相比,可能(几乎可以肯定)有更干净的方法来组织代码。你到底想实现什么?好吧,因为我想知道为什么你要将对象转换为对象类型,通常这是由于使用了ArrayList之类的东西。这样做不是一个好主意。最好创建一张地图。您将通过对象类获得具体的处理程序实现,并形成您需要的所有操作。在调用
clazz.cast(obj)
之后,这不会完成任何事情,它是什么类型的对象?我不确定OP到底想完成什么,但这就是为什么我添加了关于重载的编辑。你能使用方法m=class.getDeclaredMethod(“someHandlingMethod”);m、 调用(p);扔掉
Class.cast()
的结果完全没有任何效果。答案是不正确的。“太有名了”-显然不是。@gourabix如果你说这话的意思是你个人不知道,请参阅我提到的参考资料。如果你的意思是别的,请解释。