Java-避免通过引用传递
我用Java制作了一个Line类,我还有一个drawing类,其中有一个方法可以将线条绘制到屏幕上;当我调用该方法时,它也会使直线居中,一旦该方法完成,它就会编辑原始直线的值 我想到的一个非理想的解决方案是取消线的中心位置以更改其值,但是在这个项目中,我有很多东西,而不仅仅是一条线和一个绘图类,我想知道一种永远避免这个问题的方法。在C++中,我知道你可以通过地址或指针来发送参数,据我所知,在java中你不能这样做,但是如果有类似的情况,那可能是最好的解决方案。 这是在屏幕上绘制线的方法的代码Java-避免通过引用传递,java,parameters,reference,Java,Parameters,Reference,我用Java制作了一个Line类,我还有一个drawing类,其中有一个方法可以将线条绘制到屏幕上;当我调用该方法时,它也会使直线居中,一旦该方法完成,它就会编辑原始直线的值 我想到的一个非理想的解决方案是取消线的中心位置以更改其值,但是在这个项目中,我有很多东西,而不仅仅是一条线和一个绘图类,我想知道一种永远避免这个问题的方法。在C++中,我知道你可以通过地址或指针来发送参数,据我所知,在java中你不能这样做,但是如果有类似的情况,那可能是最好的解决方案。 这是在屏幕上绘制线的方法的代码 p
public void drawLine(Line ln) {
//I have used a new variable to try to avoid the problem, but it doesn't work.
Line buf = new Line();
buf.begin = ln.begin;
buf.end = ln.end;
buf.begin = centerPoint(buf.begin);
buf.end = centerPoint(buf.end);
gfx.drawLine((int) buf.begin.x, (int) buf.begin.y, (int) buf.end.x, (int) buf.end.y);
}
下面是我如何使用这条线
Line ln = new Line(0, 0, 100, 0);
draw.drawLine(ln);
System.out.println(ln.begin.x + ", " + ln.end.x);
//It should print 0, 0, but instead it prints out a different number, because it has been centered.
感谢您的帮助。您的问题似乎是,
centerPoint
方法更改了ln.begin
和ln.end
实例的状态
您可以避免,如果buf.begin
和buf.end
是这些实例的副本,而不是引用它们
public void drawLine(Line ln) {
Line buf = new Line();
buf.begin = new Point(ln.begin); // I'm guessing the class name and available constructor
buf.end = new Point(ln.end); // I'm guessing the class name and available constructor
buf.begin = centerPoint(buf.begin);
buf.end = centerPoint(buf.end);
gfx.drawLine((int) buf.begin.x, (int) buf.begin.y, (int) buf.end.x, (int) buf.end.y);
}
您可以通过使用Java来避免“通过引用传递”,因为它不支持这一点。为什么要将这条线居中?看这个关于“Java是“按引用传递”还是“按值传递”的问题吗Clonable@texasbruce这是另一种选择,尽管有些人认为可克隆的界面坏了。它坏了吗?为什么呢它很久以前就出现在JRE中,从未被弃用过。我看不出他有什么优点。“语言外”这到底是什么意思?如果修改其中一个,其他的也会更改。突然间,你会有随机行为。是的,那是因为它是一个肤浅的复制品。界面没有损坏,但无论谁使用它都需要知道如何正确处理它。我如何使其可克隆?