【问题标题】:How to store different types of objects in ArrayList如何在ArrayList中存储不同类型的对象
【发布时间】:2018-07-20 01:23:55
【问题描述】:

我需要在 ArrayList 中存储不同的对象。对象在本质上相似但不同并且具有不同的方法。

Circle c = new Circle();  
Cube s = new Cube();
Piramid p = new Piramid();
ArrayList<?> list = new ArrayList<?>();

所以我可以使用对象中的所有方法。

【问题讨论】:

标签: java


【解决方案1】:

可以创建一个ArrayList&lt;Object&gt;。那是一个可以存储任何东西的列表。使用它并不是很有用,因为取出东西基本上会迫使您检查它们的类型以调用任何方法。因此,您几乎应该始终避免这样做。

集合中的对象通常有一些共同点——如果没有,您应该重新考虑为什么将它们放入同一个集合中。在你的情况下,它们都是形状。因此,请考虑添加一个共享接口,例如 Shape,它结合了常用功能。

我稍微简化一下,因为您有 2D 和 3D 形状的概念,但这里是要点:

interface Shape
{
    double area();
    double perimeter();
}

class Circle implements Shape
{
    // ...

    public double area()
    {
        return radius * radius * Math.PI;
    }

    public double perimeter()
    {
        return 2 * Math.PI * radius;
    }
}

class Square implements Shape
{
     //...
}

然后创建Shapes 的列表:

List<Shape> shapes = Arrays.asList(new Circle(3), new Square(4), ...);

【讨论】:

    【解决方案2】:
    ArrayList<Object> list = new ArrayList<Object>();
    

    你可以调用包括Object类方法在内的所有方法。

    【讨论】:

    • 您将只能访问 Object 类的方法,而不能访问添加到 arrayList 中的实例的方法
    【解决方案3】:

    我认为您可以创建一个对象列表,并在使用某人时将其转换为特定类型

    List<Object> obj = new ArrayList<Object>();
    
    if (obj.get(i) instanceof Class) {
        Class objCast = (Class)obj 
    }
    

    Objects DOC

    【讨论】:

      【解决方案4】:

      这是你必须做的。

      1. 定义一个Shape接口..

      2. 实现 Circle 和 Cube 的接口

      3. 为 Circle 和 Cube 创建形状对象并将它们添加到 arraylist..

      代码如下:

      public interface Shape {
      
          public void draw();
      
      }
      
      
      
      public class Circle implements Shape {
      
      @Override
      public void draw() {
          System.out.println("Drawing Circle");
      
      }
      
      }
      
      
      
      public class Cube implements Shape {
      
      @Override
      public void draw() {
          System.out.println("Drawing Cube");
      }
      
      }
      
      
      
      public class Simulator{
      
      public static void main(String[] s){
      
          Shape s1 = new Circle();
          Shape s2 = new Cube();
      
          ArrayList<Shape> shapeList = new ArrayList<Shape>();
          shapeList.add(s1);
          shapeList.add(s2);
      }
      }
      

      【讨论】:

        【解决方案5】:
        List<Object> list = new ArrayList<>();
        
        list.add(new ArrayList<>());
        list.add(Integer.valueOf("24"));
        list.add(Long.valueOf("25"));
        list.add("STRING");
        list.add(new Object());
        
        System.out.println(Arrays.toString(list.toArray()));
        //Console print: " [[], 24, 25, STRING, java.lang.Object@4554617c] "
        

        您可以存储任何对象类型。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-02
          • 1970-01-01
          相关资源
          最近更新 更多