Я хотел бы ограничить совместимые типы ввода метода в коллекцию подклассов определенных классов. Тем не менее, я хотел бы только разрешить прием первого уровня для подклассов. Например, класс 'shape' имеет множество подклассов, например. «Прямоугольник», «круг», «треугольник». Теперь у «прямоугольника» есть собственный «класс» подкласса, так как я могу ограничить принятые коллекции только принятием иерархического уровня подклассов, состоящих из прямоугольника, круга и треугольника без принятия квадрата?Ограничение ограниченного шаблона в Java только на один уровень подклассов класса?
0 shape
/ | \
1 rectangle circle triangle
|
2 square
Я знаю, что, чтобы охватить все подклассов формы и их подклассов я хотел бы сделать следующее:
public void methodName(List<? extends shape>){ ... }
Однако, как бы я ограничить его только один уровень подклассы от формы? i.e (только прямоугольник, круг, треугольник)
Короткий ответ: вы не можете. Длинный ответ: ты не знаешь, а ты не должен. –
Если вы нуждаетесь в этом, вам нужно сделать шаг назад и спросить себя, действительно ли наследование - правильный способ моделирования вашей проблемы. Это также не относится к дженерикам, это наследование в целом. Просто потому, что в вашей исходной проблеме каждый 'A' является' B', это не обязательно означает, что класс, представляющий 'A', должен расширять класс, представляющий' B'. – biziclop