如何创建此类的对象?

Ice*_*Box 6 java

在课堂上B,我怎样才能创建A除了对象创建过程之外的类对象(即不创建对象null)?

class A
  {
    public int one;  
   A(A a)
    {
      a.one=1;
    }
  }
class B
  {
   public static void main(String...args)
     {
     //now how to create an object of class A over here.
     }
  }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

要构造A类型的对象,您需要向构造函数传递对A类型的另一个对象的引用,或者为null引用.所以你只有两个选择:

A a1 = new A(null);
A a2 = new A(a1);
Run Code Online (Sandbox Code Playgroud)

第一次创建类型的对象时,A必须使用空引用,因为您没有任何其他类型的对象A.


更新

在你改变了问题之后,我认为不可能构造一个类型的对象A.


Lil*_*hal 5

如果我正确理解了您的问题,您需要创建一个对象,而不必将它传递给相同类型的预先存在的对象.

为此,您必须向A类添加一个构造函数,该构造函数不接受类型A的参数或修改现有参数:

class A
    {
        A() {
            // Constructor logic.
        }
        A(A a) {
            // Constructor logic when passing an existing object of the same type, perhaps to create a clone.
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因您无法修改A类,则必须遵循Mark Byers的答案并将null引用传递给构造函数.


更新

随着代码的更新,此问题(或思想实验)无法解决:A类无法实例化为已编写.


Are*_*rff 4

在 Java 中通常不能执行此操作。

然而,严重作弊是可能的。不要在生产代码中执行此操作。但为了论证:

1)使用Mockito(但不能与安全管理器一起使用):

import org.mockito.Mockito;

class B {

    public static void main(String... args) {
        A mockedA = Mockito.mock(A.class);
        A realA = new A(mockedA);
        System.out.println(realA);
    }
}
Run Code Online (Sandbox Code Playgroud)

2)这是另一种方法来覆盖它finalize()