Java 将不同对象类型的ArrayList合并为一个

Java 将不同对象类型的ArrayList合并为一个,java,swing,object,arraylist,awt,Java,Swing,Object,Arraylist,Awt,我有一些arraylist,其中包含基于类中构造函数的对象(对于类似绘画的程序),并希望将它们都放在同一arraylist中,而不是让每个项按顺序重新绘制 我尝试将数组转换为2d数组(未成功),还尝试将标识符附加到每个对象,并将从基本数组(即package1.package2.ShapeClas@中获取的内容打印到控制台。未成功获取返回,我可以做任何事情 我想要组合的数组类似于下面的数组 public static ArrayList<ShapeClass> emptyRectang

我有一些arraylist,其中包含基于类中构造函数的对象(对于类似绘画的程序),并希望将它们都放在同一arraylist中,而不是让每个项按顺序重新绘制

我尝试将数组转换为2d数组(未成功),还尝试将标识符附加到每个对象,并将从基本数组(即
package1.package2.ShapeClas@
中获取的内容打印到控制台。未成功获取返回,我可以做任何事情

我想要组合的数组类似于下面的数组

public static ArrayList<ShapeClass> emptyRectangle = new ArrayList<ShapeClass>();
public static ArrayList<ShapeClass> filledRectangles = new ArrayList<ShapeClass>();
public static ArrayList<ShapeClass> lineArray = new ArrayList<ShapeClass>();

我希望能够将数组组合成一个数组,这样我就可以按顺序重新绘制每个元素,因为现在它们是按形状类型绘制的,所以一个形状类型总是与另一个重叠。如何将它们放入单个数组中并成功识别要绘制的形状?

由于ArrayList类实现了List接口,您只需从List接口使用
.addAll(Collection c)
方法即可轻松完成此操作

ArrayList<ShapeClass> allShape = new ArrayList<>();    
allShape.addAll(emptyRectangle);
allShape.addAll(filledRectangles);
allShape.addAll(lineArray);

你在找这样的东西吗?是的,但当我想重新绘制它们时,我不知道如何使用正确的方法,因为每个形状都需要自己的方法来正确绘制,因为形状使用不同的调用,我不能在不识别形状的情况下使用这些不同的调用,但不知道如何附加该标识(尝试了一个2d数组,该数组比形状值具有更直观的属性,但不起作用)@Anan我编辑了我的答案,以展示如何识别形状并调用自己的方法进行绘制。希望这能有所帮助。
ArrayList<ShapeClass> allShape = new ArrayList<>();    
allShape.addAll(emptyRectangle);
allShape.addAll(filledRectangles);
allShape.addAll(lineArray);
    for(ShapeClass shape: allShapes) {
        System.out.println(shape.getClass()); // class <actual class>
        if(shape instanceof Triangle) {
            Triangle tri = (Triangle) shape;
            tri.paint();
        } else if(shape instanceof Rectangle) {
            Rectangle rec = (Rectangle) shape;
            rec.paint();
        }
    }
    ArrayList<ShapeClass> allShape = new ArrayList<>();
    allShape.addAll(emptyRectangle);
    allShape.addAll(filledRectangles);
    allShape.addAll(lineArray);

    for(ShapeClass shape: allShape) {
        shape.paint();   // make sure you have a paint() method in the ShapeClass, and it is overriden in the subclass. 
    }