6

在类中,除了创建对象的过程(即不创建具有的对象)之外B,我如何创建类的对象?Anull

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.
     }
  }
4

6 回答 6

7

要构造 A 类型的对象,您需要将对另一个 A 类型对象的引用或空引用传递给构造函数。所以你只有两个选择:

A a1 = new A(null);
A a2 = new A(a1);

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


更新

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

于 2012-06-02T10:22:51.490 回答
5

如果我正确理解您的问题,您想创建一个对象 a 而不必将其传递给相同类型的预先存在的对象。

为此,您必须向 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.
        }
    }

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


更新

随着代码的更新,这个问题(或思想实验)是无法解决的:类 A 不能按所写的方式实例化。

于 2012-06-02T10:28:01.547 回答
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);
    }
}

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

于 2012-06-02T19:00:21.213 回答
3

创建 A 对象的唯一方法是在构造函数中给他另一个 A 对象,但是另一个 A 对象在构造函数中也需要另一个 A 对象。仅当您在构造函数中放置空引用时,这才会停止。

编辑

我的回答是基于您以前版本的代码。现在您无法创建对象,因为您无法放入null构造函数(null 没有one字段)。如果要创建 A 对象,则必须在构造函数中对 null 进行测试,并在构造函数中if (a!=null){ a.one=1;}传递 null 或已创建的 A 对象。

于 2012-06-02T10:25:56.337 回答
2

您不能在示例中实例化 A 。这是一个先有鸡还是先有蛋的问题。您需要 A 的实例来创建 A 的实例,但如果没有 A 的实例,则无法创建 A 的实例。

因此,如果不对 A 进行更改(无论是添加“空”检查还是添加默认构造函数),您都无法在这种情况下创建 A 的实例。

于 2012-06-02T12:24:12.567 回答
2

如果 A 是密封的(不可编辑),您只能扩展该类并为其提供默认构造函数以将其传递给 A 的新实例。如果不修改 A 的源代码,则没有其他解决方案。

于 2012-06-02T11:10:11.553 回答