【问题标题】:Is there a way to store a object immediately to a another classes list?有没有办法将一个对象立即存储到另一个类列表中?
【发布时间】:2020-09-17 16:36:23
【问题描述】:

标题,我在想这样的事情

Shapes s = new Shapes();
Circle c = new Circle("Our", "Parameters");
Rectangle r = new Rectangle("Our", "Parameters");

Shapes.addToList(c); // I don't want to do this for every object I create
Shapes.addToList(r); 

所以我想在初始化对象时将这些对象添加到“形状”列表中。

有什么想法吗?

【问题讨论】:

  • Shapes 对象传递给构造函数,将this 添加到构造函数内的该对象。也许CircleRectangle 有一个共同的祖先类,它的构造函数中有这个以避免重写它。
  • 我考虑过将 Shapes 作为参数传递,但我需要为所有形状执行此操作,这可行,但我想看起来很糟糕。
  • 根据你的需要,让每个实例都知道它的“容器”通常是一种不好的模式,所以你不会在构造函数中传递它
  • 问题是,您是否需要访问cr?你能做s.add(new Circle())吗?那么只处理s?
  • 我认为这个程序实际上是有意义的,因为它包含在哪个类别中很重要。

标签: java class oop inheritance


【解决方案1】:

如果 Circle 和 Square 都继承自 Shapes,那么在 Shapes 构造函数中,您可以自动添加到您的列表中。在析构函数中,您需要删除它。import java.util.*;

public class Shapes {
    public static List<Shapes> allMyShapes = new ArrayList<Shapes>();

    public Shapes() {
        addToShapes(this);
    }

    static public void addToShapes(Shapes myShape) {
        allMyShapes.add(myShape);
    }

    static public void dump() {
        System.out.printf("Number of shapes stored: %d\n", allMyShapes.size());
    }
}

public class Foo {
    public static void main(String[] args) {
        Shapes myFirstShape = new Shapes();

        Circle myCircle = new Circle();
        Square mySquare = new Square();

        Shapes.dump();
    }
}

我没有实现析构函数。当然,这只有在您总是想要这种行为时才有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多