是否可以在 Java 中有一个数组或一个几何图元列表?

Is it possible to have an array or a list of geometric primitives in Java?

考虑使用一组原始几何形状绘制图像。我能想到的解决方案是将项目组合成一个数组,遍历它并调用 draw 方法:

Object[] elements = {(new Ellipse2D.Double(200, 200, 40, 40)), 
                     (new Line2D.Double(10, 10, 100, 100)), 
                     (new Rectangle2D.Double(50,50,90,90))};

for (int j=0; j<elements.length; j++){ 
g2d.draw(elements[j]);
}

如果他们都属于同一个 parent class,这应该是可能的。但是我无法确认这样的 class 是否存在。 您能否澄清一下 object class 或者是否有另一种方法可以制作 array/list 形状?

编辑:谢谢大家的及时回答! :)

第一步是查看 API 文档,了解您的一种类型,例如 Ellipse2D.Double

我们可以看到它扩展了 Ellipse2D,单击它可以得到 RectangularShape。列出(直接)子类,但 Line2D 不在其中。您想要界面 Shape 就大功告成了。

或者,查看 Graphics2D.draw 方法并观察它将参数声明为 Shape

您 editor/IDE 也可以更直接地提供此信息。

class的绘制方法java.awt.Graphics2D以java.awt.Shape接口作为参数。

java.awt.Shape javadoc 包含:

All Known Implementing Classes:

Arc2D, Arc2D.Double, Arc2D.Float, Area, BasicTextUI.BasicCaret, CubicCurve2D, CubicCurve2D.Double, CubicCurve2D.Float, DefaultCaret, Ellipse2D, Ellipse2D.Double, Ellipse2D.Float, GeneralPath, Line2D, Line2D.Double, Line2D.Float, Path2D, Path2D.Double, Path2D.Float, Polygon, QuadCurve2D, QuadCurve2D.Double, QuadCurve2D.Float, Rectangle, Rectangle2D, Rectangle2D.Double, Rectangle2D.Float, RectangularShape, RoundRectangle2D, RoundRectangle2D.Double, RoundRectangle2D.Float

所以下面的内容完全符合你的需要

java.awt.Shape[] elements = {
        new Ellipse2D.Double(200, 200, 40, 40),
        new Line2D.Double(10, 10, 100, 100), 
        new Rectangle2D.Double(50, 50, 90, 90)};

编辑:已添加评论修复