用Java动态地转换对象?

Avi*_*ohn 3 java casting

我有一个抽象类,Entity有几个子类:SubclassA,SubclassB,和SubclassA有一个子类SubSubClass.

我还有一个someObject类的对象,SomeClass如下所示:

class SomeClass{
    void doSomething(Entity e){..}
    void doSomething(SubclassA e){..}
    void doSomething(SubclassB e){..}
    void doSomething(SubSubClass e){..}
}
Run Code Online (Sandbox Code Playgroud)

我有一个List<Entity> list.此列表中的每个项目都会传入someObject.doSomething.

for(Entity entity : list){
    someObject.doSomething(entity);
}
Run Code Online (Sandbox Code Playgroud)

doSomething(Entity e)无论实际的当前Entity类型是什么,总是会调用Thing ,因为引用类型总是如此Entity.为了解决这个问题,我需要进行投射,如:someObject.doSomething((SubclassB)entity).

所以我想知道是否有一种方法可以将对象动态地转换为任何具体类型,而无需instanceof操作.

如果没有办法做到这一点,你会如何处理我的情况?

Sot*_*lis 5

翻转它,添加一个receiveWork(或任何你想要命名的)方法(可能需要一个Runnable或其他可执行单元)Entity和它的子类,并在你的foreach循环中调用该方法.让多态为你做的工作.