Значения x
и y
, которыми манипулируют в методе rotate
, не будут видны в вызывающем его методе, поскольку Java передает аргументы метода по значению .
Следовательно, значения x
и 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
для возврата 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.
}
Тем не менее, как сказал Пьер , с помощью 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
, можно найти в связанных спецификациях API Java для интерфейса Shape
.
Для получения дополнительной информации о том, как использовать AffineTransform
и Java 2D: