gpt4 book ai didi

java - 在整个应用程序中引用在一个类中创建的静态对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:24 25 4
gpt4 key购买 nike

我有一个在基类中创建两个静态对象的 java 应用程序,这些对象需要在程序中的整个类中引用。

public class Baseclass{
public static ClassA A = new ClassA();
public static ClassB B = new Classb();
...
...
...
}

这些对象在其他类中作为局部私有(private)变量被引用。

public class ClassA{
private ClassB b = Baseclass.B;

但是,两个对象都需要彼此才能运行,如果我在创建另一个对象之前创建其中一个对象的新实例,则“上层”类中的局部变量将设置为 null。 Java 中是否有任何概念将实际对象(如指针)作为变量引用到对象而不是复制对象?

最佳答案

However, both object require each other to function and if I creates a new instance of one of the objects before the other is created, the local variable in the "upper" classes is set to null.

我认为您正在寻找的答案是“单例模式”。这是您只创建类的一个实例以供其他地方使用的地方。这是一个 good link to read .这是 wikipedia page on it一些 Java 示例。

所以你的代码看起来像这样:

public class A {
private final static A instance = new A();

/* private constructor forces you to use the getInstance() method below */
private A() {}

public static A getInstance() {
return instance;
}
}

然后无论你想获得 A 的一个实例,你都可以这样做:

public class B {
private final A classA = ClassA.getInstance();
...
}

A 没有理由不能同时拥有 B 的实例并在其自己的方法中调用 B 的方法。对于这种交叉依赖,您不能做的是在构造函数中调用任何其他方法。

一般来说,这些模式应该谨慎使用。实现此目的的更好方法是通过依赖注入(inject)而不是全局引用。交叉注入(inject)是可能的,但同样应该谨慎使用。更好的解决方案是将类重构为具有线性依赖关系。

Is there any concepts in Java that would reference the actual object (like a pointer) to the object as a variable instead of making a copy of the object?

Java 是按值传递,但任何对象的值都是对该对象的引用(类似于 C 中的指针,尽管它们不是内存地址)。因此,如果您有一个 A 的实例并将其分配给另一个字段,则该字段将具有相同的值并将引用 A 的相同实例。

// instantiate a new instance of A
A a1 = new A();
// assign the reference to A to another variable
a2 = a1;
// they are equivalent and both reference the same object
if (a1 == a2) ...

关于java - 在整个应用程序中引用在一个类中创建的静态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8231019/

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