我在使用instanceof
运算符时遇到了问题。我试图避免使用它。基本上,我有以下结构:
class Shape {}
class Triangle extends Shape {}
class Rectangle extends Shape {}
ShapeParser s;
while (s.hasNext())
parseShape(s.next()); // returns a Shape object
void parseShape(Triangle t) { // do stuff } // KEY POINT HERE
void parseShape(Rectangle t) { // etc }
我的重点是:我想对函数进行参数重载,但它并没有按照我的意图工作(编译错误)。我试图避免以下情况:
void parseShape(Shape s)
{
if (s instanceof Triangle) ...
}
更新:似乎共识是创建一个基类方法:parseShape()来进行提取。我想澄清我的问题:这个问题的动机与观察者模式有关。假设我有以下Observer对象负载方法:
public void update(Observable obj, Shape objectPayload){}
// note: the objectPayload is usually of type Object
不要执行:
public void update(Observable obj, Shape objectPayload)
{
if (objectPayload instanceof Triangle)
// do stuff
else if (objectPayload instanceof Rectangle)
// etc
}
我想要做的事情:
public void update(Observable obj, Shape objectPayload)
{
parseShape(objectPayload);
}
void parseShape(Triangle t) { } // do stuff
void parseShape(Rectangle t) { }
t
呢? :-) - paxdiablo