方法中操作的x
和的值不会在调用它的方法中看到,因为Java 通过值传递方法参数。y
rotate
因此,方法中被改变的x
and值是一个本地副本,所以一旦超出范围(即从方法返回到它的调用方法),and的值就会消失。y
rotate
rotate
x
y
所以目前,正在发生的事情是:
x = 10;
y = 10;
o1 = new obj();
o1.a = 100;
rotate(x, y, obj);
System.out.println(x); // Still prints 10
System.out.println(y); // Still prints 10
在 Java 中从方法中获取多个值的唯一方法是传递一个对象,并操作传入的对象。(实际上,在进行方法调用时会传入对该对象的引用的副本。)
例如,重新定义rotate
以返回 a Point
:
public Point rotate(int x, int y, double angle)
{
// Do rotation.
return new Point(newX, newY);
}
public void callingMethod()
{
int x = 10;
int y = 10;
p = rotate(x, y, 45);
System.out.println(x); // Should print something other than 10.
System.out.println(y); // Should print something other than 10.
}
也就是说,正如Pierre 建议的那样,在我看来,使用AffineTransform会容易得多。
例如,创建一个Rectangle
对象并使用它旋转它AffineTransform
可以通过以下方式执行:
Rectangle rect = new Rectangle(0, 0, 10, 10);
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(45));
Shape rotatedRect = at.createTransformedShape(rect);
AffineTransform
可以应用于实现Shape
接口的类。Shape
可以在接口的链接 Java API 规范中找到实现的类列表Shape
。
有关如何使用AffineTransform
和 Java 2D 的更多信息: