在单独的方法中初始化 Java 对象:为啥这不起作用
Posted
技术标签:
【中文标题】在单独的方法中初始化 Java 对象:为啥这不起作用【英文标题】:Initializing a Java object in a separate method: why this won't work在单独的方法中初始化 Java 对象:为什么这不起作用 【发布时间】:2011-10-26 18:00:07 【问题描述】:这件事我不能说我很惊讶它不起作用,但无论如何,找到这个案例的解释对我来说很有趣。 假设我们有一个对象:
SomeClass someClass = null;
以及将这个对象作为参数来初始化它的方法:
public void initialize(SomeClass someClass)
someClass = new SomeClass();
然后当我们调用时:
initialize(someClass);
System.out.println("" + someClass);
它将打印:
null
感谢您的回答!
【问题讨论】:
Is Java pass by reference? 的可能重复项 Can I pass parameters by reference in Java?的可能重复 【参考方案1】:以及将这个对象作为参数来初始化它的方法:
在您的情况下,该方法不采用 object 作为参数。它需要一个指向 null 的引用。然后它复制此引用并将其指向SomeClass
的新实例。但显然,您作为参数传递的引用仍然指向 null。
【讨论】:
【参考方案2】:正如 Armen 所说,您想要做的事情是不可能的。为什么不使用factory method?
【讨论】:
【参考方案3】:在java中是不可能的。在 C# 中,您将使用 ref
或 out
关键字传递参数。 java中没有这样的关键字。详情可以看这个问题:Can I pass parameters by reference in Java?
顺便说一句,出于同样的原因,您不能在 java 中编写交换两个整数的交换函数。
【讨论】:
以上是关于在单独的方法中初始化 Java 对象:为啥这不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Java 反射 API 允许我们访问私有和受保护的字段和方法?这不会破坏访问修饰符的目的吗? [复制]
为啥我不能将 ToUpper() 应用于 OwnerNode?