Учитывая этот примитивный класс
Код: Выделить всё
primitive class Point implements Shape {
public long x;
public long y;
public Point(long x, long y) {
this.x = x;
this.y = y;
}
public boolean contains(Point p) {
return equals(p);
}
}
interface Shape {
boolean contains(Point p);
}
Почему мы не сможем это сделать ?
Код: Выделить всё
points[0].x = 42; //lastore
points[1].x++; //laload, iinc, lastore
Point p = points[2]; //laload, laload
Shape s = p; //new Point.ref (boxing)
p.x++; //iinc
assert !s.contains(p);
Обратите внимание, что Point должен быть сглаженным, а не сглаживаемым, чтобы пользователь мог быть уверен, что он не будет сглаживаться. изменить общий экземпляр.
Может ли кто-нибудь дополнительно разъяснить причину неизменности примитивных типов?
@see
< ul>
[*]JEP 401: Примитивные классы (предварительная версия)
[*]Государство Валгалла – Часть 3: Модель JVM
Подробнее здесь: https://stackoverflow.com/questions/733 ... le-structs