Допустим, у меня есть один класс Foo
, в котором есть куча логики, и другой класс Bar
, который по сути одинаков. Однако, поскольку Foo
и Bar
являются различными (но связанными) сущностями, мне нужно, чтобы различие было очевидно из моего кода (т.е. я могу сказать, является ли экземпляр Foo
или Bar
)
Пока я бился об этом, не задумываясь, я получил следующее:
public class Foo {
/* constructors, fields, method, logic and what-not */
}
public class Bar extends Foo {
/* nothing here but constructors */
}
Это нормально? Что лучше сделать Bar
составным классом? например:
public class Bar {
private Foo foo;
/* constructors and a bunch of wrapper methods that call
into foo */
}
Или даже, пока мы на этом, что-то гораздо более низкотехнологичное:
public class Foo {
/* constructors, fields, method, logic and what-not */
private boolean isABar; // Could be an enum
}
Что вы думаете? Как вы справляетесь с этими «маркерными классами»?
В качестве примера того, как мой код может по-разному относиться к Foo
и Bar
, мой код должен иметь возможность выполнять такие вещи, как List<Foo>
и List<Bar>
. A Foo
не может войти в List<Bar>
и наоборот.