У меня проблемы с оператором 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 }
Ключевой момент, который я подчеркиваю: я хочу сделать перегрузку параметра функции, но она не работает так, как я намереваюсь (compile-error).Я пытаюсь избежать:
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) { }