假设我创建了一个传递对象的方法,该方法将根据传递的对象执行操作.我该如何识别物体?
我想过使用类名来标识对象,但这可能是不切实际的,因为我可以轻松地更改对象的类名,并在将来的开发过程中产生令人头疼的问题.我对吗?
编辑:例如,我有对象球和炸弹.如果我有另一个叫做墙的物体,墙有解决与墙碰撞的方法(例如碰撞球和炸弹的坐标),但根据碰撞对象(即球和炸弹)有不同的逻辑
您要求的是instanceof运营商.
if (object instanceof SomeClass) {
// do something
} else if (object instanceof SomeOtherClass) {
// do something else
}
Run Code Online (Sandbox Code Playgroud)
但是,这不是一个好习惯.相反,您可以使用所谓的双重调度.使传递的对象符合接口,该接口根据另一个类定义操作.所以:
public interface ThrowableItem {
void throwAt(Wall wall);
}
public class Wall {
void accept(ThrowableItem item) {
item.throwAt(this);
}
}
Run Code Online (Sandbox Code Playgroud)
然后提供适当的实现方式内Ball和Bomb(两者实现ThrowableItem)
查看访问者模式 - 您可以将操作移动到WallVisitor知道如何处理每个对象的聚合的操作.