instanceof против полиморфизма

У меня проблемы с оператором 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) { }
5
задан Matt Ball 9 June 2011 в 17:07
поделиться