在课堂上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)
要构造A类型的对象,您需要向构造函数传递对A类型的另一个对象的引用,或者为null引用.所以你只有两个选择:
A a1 = new A(null);
A a2 = new A(a1);
Run Code Online (Sandbox Code Playgroud)
第一次创建类型的对象时,A必须使用空引用,因为您没有任何其他类型的对象A.
更新
在你改变了问题之后,我认为不可能构造一个类型的对象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.
}
}
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因您无法修改A类,则必须遵循Mark Byers的答案并将null引用传递给构造函数.
更新
随着代码的更新,此问题(或思想实验)无法解决:A类无法实例化为已编写.
在 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()。
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |