gpt4 book ai didi

java - 如何避免多次创建相同的对象引用?

转载 作者:搜寻专家 更新时间:2023-11-01 01:02:51 25 4
gpt4 key购买 nike

假设我有一些看起来像这样的类:

class Car {
private Image carImage;

public Car(int imageIndex) {
switch (imageIndex) {
case 1: carImage = generateCarImage(1); break;
# and so forth
}
}
}

class Audi extends Car {
private int numberOfSeats;
public Audi(int imageIndex, int numberOfSeats) {
super(imageIndex);
this.numberOfSeats = numberOfSeats;
}
}

现在假设我使用同一张图片创建了多个奥迪:

Audi car1 = new Audi(1,2);
Audi car2 = new Audi(1,3);

car1 和 car2 会扩展同一个对象吗?我想不会,但是有什么办法可以做到吗?我问是因为我想避免两次生成和存储相同的图像。

编辑:

这两个 audi 指的是同一辆车吗?图像只生成和存储一次,对一个图像的任何更改都会影响另一个图像?

class Car {
private Image carImage;
public Car(int imageIndex) {
switch (imageIndex) {
case 1: # carImage = readfile(1.jpeg)
# and so forth
}
}
}

class Audi{
private int numberOfSeats;
private Car car;
public Audi(Car car, int numberOfSeats) {
this.car = car;
this.numberOfSeats = numberOfSeats;
}
}

Car car = new Car(1);
Audi audi1 = new Audi(car,2);
Audi audi2 = new Audi(car,2);

编辑 2:

这里有很多好的答案,我最终结合使用它们来创建一个不错的解决方案。我最初的问题并没有很好地定义,主要是因为我不知道自己到底是什么。

无论如何,对于这个问题,不可能事先生成所有数据(下面示例中的 PartsInfo),我也不能显式生成数据(如上面的 switch-case 示例所暗示的) ).以下解决方案的最大问题是,如果不检索整个内容(就像调用 Car.getPartsInfo() 时在解决方案中所做的那样)或创建多个实例,我将无法访问 PartsInfo 中的各个字段相同对象的(在这种情况下,Car 类将获得自己的 PartsInfo 变量)。

弱 HashMap 也可以,但不是最优的,因为问题不是垃圾收集,而是存储在不同实例中的大量相同数据。

如果 ID 类似于“audi-a4-2003”,并且 PartsInfo 对于所有“audi-a4-2003”都是相同的,无论颜色、所有者、年龄、数量座位等,但“audi-a4-2004”完全不同。

谢谢

Class PartsInfo {
// lots of stuff I'd rather not create nor save multiple times
}

Class PartsInfoFactory {
private static HashMap<String, PartsInfo> partsInfoMap = new HashMap<String, PartsInfo>();

public static getPartsInfo(String id) {
if (!partsInfoMap.containsKey(id)) {
generatePartsInfo(id);
}
return partsInfoMap(id)
}

private static generatePartsInfo(String id) {
// Do stuff I don't want to do twice for same ID
partsInfoMap.put(id)
}
}

Class Car {
private Color color;
private String id;
// Notice that PartsInfo is not stored here

public Car(Color color, String id) {
this.color = color;
this.id = id;
}

public PartsInfo getPartsInfo() {
return PartsInfoFactory.getPartsInfo(id);
}
}

最佳答案

Will car1 and car2 extend the same object?

一个类可以从另一个类扩展。对象不扩展任何东西。在 Java 中,继承仅适用于类和接口(interface)。您在这里所做的是创建同一类 Audi 的两个实例,而 Audi 是从 Car 扩展而来的。

is there a way I can make it so?

没有。

I'm asking because I want to avoid generating and storing the same image twice.

这是要回答的正确问题。您真正的问题是如何避免多次创建相同 对象实例。为此,最好通过使用 WeakHashMap 来使用对象池。 .这里解释了为什么要使用这个结构:When would you use a WeakHashMap or a WeakReference?

关于java - 如何避免多次创建相同的对象引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32335739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com