Вот мой код на Java
public List<OBJ> a = new ArrayList<OBJ>();
public String A;
public String B;
public String C;
for (OBJ o : a) {
// .... TODO
}
Итак, у меня есть интерфейс OBJ, и есть три объекта, которые реализуют OBJ, скажем, X, Y, Z. Поэтому я храню объекты X / Y / Z в Списке а. Теперь скажите, что я хочу пройти через цикл, и если o имеет экземпляр X, сохранить X.value в A, если Y сохранить Y.value в B, и если Z сохранить Z.value в C. Так что проблема в том, как сделать Вы выясняете, какой тип объекта o (X, Y, Z), чтобы хранить их значения в правой строке.
ПРИМЕЧАНИЕ. Я хочу использовать шаблон Visitor или что-то в этом роде, но я не совсем понимаю, поэтому прошу вашей помощи.
Это означает, что НЕТ экземпляров или типов и НЕТ специальных методов, таких как
interface OBJ {
void blah();
}
class X implements OBJ {
public void blah();
} // etc
Спасибо! Я действительно хочу избавиться от этого аспекта разработки программного обеспечения!
Эй, вау, спасибо за подробные и быстрые ответы, но моя ситуация немного сложнее, и извините, я не добавил это раньше.
Таким образом, строки A, B, C на самом деле находятся в другом классе, например
class ARGH {
public List<OBJ> a = new ArrayList<OBJ>();
public String A;
public String B;
public String C;
//invisible constructor here
public String toString () {
for (OBJ o : a) {
// .... TODO
}
return "some string"
}
}
public void main (String[] args) {
ARGH argh = new ARGH();
// Setup some X, Y, Z objects and their values here
String D = argh.toString();
// Do something to D
}
Таким образом, строки и список на самом деле не являются глобальными переменными, поэтому я не думаю, что это сработает:
ObjVisitor v = new ObjVisitor() {
@Override
public void visit(X x) {
A = x.value();
}
// And so on.
}
Я предполагаю, что мне нужно как-то передать строку A, B, C в метод посещения, но я не знаю, как это сделать, и все еще оставаться с шаблоном Visitor.