我想将方法输入的兼容类型限制为某个类子类的集合。但是,我只想允许接受子类的第一级。例如,班级形状'有各种各样的子类,例如。 '矩形''圆''三角形&#39 ;.现在'矩形'拥有它自己的子类' square'那么如何限制接受的集合只接受包含矩形,圆形和三角形的子类的层次级别而不接受正方形?
0 shape
/ | \
1 rectangle circle triangle
|
2 square
我知道要包含形状及其子类的所有子类,我将执行以下操作:
public void methodName(List<? extends shape>){ ... }
但是,我如何将其限制为仅从形状下降到一个级别的子类?即(仅矩形,圆形,三角形)
答案 0 :(得分:0)
如果您尝试这样做,那么您违反了Liskov Substitution Principle。
简而言之,它指出应始终接受子类来代替它们的超类。从概念上讲,如果一个正方形是一个矩形,那么它怎么可能是一个矩形所不被接受的。
所以,这只是意味着您可能希望以不同的方式对问题进行建模。遗憾的是,你没有提到 square 具有什么属性,这使得它不是矩形。
话虽如此,将 square 作为 rectangle 的子类通常会有问题。请参阅:https://en.wikipedia.org/wiki/Circle-ellipse_problem。