提问人:Dukkha 提问时间:12/13/2020 最后编辑:Mark RotteveelDukkha 更新时间:12/13/2020 访问量:46
关于解决按价值传递问题的任何提示?
Any tips on getting around the pass-by-value issue?
问:
在下面的代码中,我有一个经典的 Java 按值传递问题(用处理编写; setup() == main)。
void setup()
{
A a = new A();
a.makeTheB(a.b);
System.out.println(a.b); //Returns null
}
class A
{
B b;
public void makeTheB(B tempB)
{
tempB = new B();
}
}
class B
{
float x; //not used
}
有人有什么聪明的技巧来将新对象分配给作为参数传递的引用吗?
如果需要,我可以描述我的意图,但如果存在的话,我希望有一个笼统的答案。
编辑:看起来我需要描述我的意图。 我正在使用复合模式来创建对象的递归层次结构。我在该层次结构之外有一个对象,我想引用层次结构中的一个对象。我想通过复合责任链样式传递该对象,然后让该对象引用负责它的对象。
我敢肯定,我可以通过返回值找到一种方法来实现这一点,但是如果有任何切肉刀方法可以做到这一点,那么能够分配我传递到层次结构中的参数肯定会很好。
答:
1赞
Lakindu Hewawasam
12/13/2020
#1
您可以尝试返回您在类 4 中创建的对象B
A
如下图所示。
public class A {
B b;
public B makeTheB(B tempB) {
tempB = new B();
return tempB;
}
}
public class B {
float x; //not used
}
public class Test {
public static void main(String[] args) {
A a = new A();
B b = a.makeTheB(a.b);
System.out.println(b); //Returns nu
}
}
输出:B@7852e922
1赞
tgdavies
12/13/2020
#2
你可以这样做,但也许你需要更好地描述你想要实现的目标。
void setup()
{
A a = new A();
a.makeTheB(a);
System.out.println(a.b);
}
class A implements Consumer<B>
{
B b;
public void accept(B b) {
this.b = b;
}
/**
* Create a B, and give it to a Consumer which knows where it needs to be stored.
*/
public void makeTheB(Consumer<B> consumer)
{
consumer.accept(new B());
}
}
class B
{
float x; //not used
}
评论
void