将 Java 中的有界通配符类型限制为类的子类的一个级别



我想将方法输入的兼容类型限制为某个类子类的集合。但是,我只想允许接受子类的第一级。例如,类"形状"具有各种子类,例如。"矩形","圆形","三角形"。现在"矩形"有自己的子类"正方形",那么我如何将接受的集合限制为仅接受由矩形、圆形和三角形组成的子类的层次结构级别,而不接受正方形?

0                 shape
                /   |   
1       rectangle circle triangle
            |
2       square

我知道要包含形状的所有子类及其子类,我会执行以下操作:

public void methodName(List<? extends shape>){ ... }

但是,我如何将其限制为仅从形状向下的一个子类级别?即(矩形,圆形,三角形)

如果你试图这样做,那么你就违反了利斯科夫替换原则。

简而言之,它指出子类应该始终被接受来代替它们的超类。从概念上讲,如果正方形是矩形,那么当矩形矩形时,它怎么可能不被接受。

所以,这一切都意味着你可能想以不同的方式对问题进行建模。不幸的是,您没有提到正方形具有什么属性,使其在某种程度上不是一个矩形

话虽如此,使正方形成为矩形的子类通常是有问题的。请参阅:https://en.wikipedia.org/wiki/Circle-ellipse_problem 。

相关内容

最新更新