如果这个地方不合适,请在关闭问题之前指出我在哪里可以讨论/解决我的疑惑。
这是我脑子里想的一点点。在Java,也许还有其他OOP语言中,有什么比这更好的了......
class Entity {
[final] int xPos;
[final] int yPos;
// ...
}
或者更确切地说......
class Entity {
Position p;
// ...
}
class Position {
[final] int x;
[final] int y;
}
这有什么优点和缺点?对我来说,使用第二种方法似乎更实际,特别是当您需要输入两个属性作为方法参数或返回值时,但我也在考虑是否会产生太多不需要的过程(为次要事物创建新对象) ...
答案 0 :(得分:2)
或者您可以不编写自定义类并使用Point
。真的,这取决于你。如果你需要执行涉及坐标的计算,或者需要绕过很多对象的坐标,那么最好将它们包装在一个对象中以保持代码更简单。如果它们是不变的,并且永远不会改变(你永远不会真正知道),那么你可以将它们保持为int
值。
答案 1 :(得分:2)
如果它代表具有独立目的的东西,那么你真的只需要一个单独的类定义 - 因此将来可能需要其他地方或包含独立的功能(责任分工)。正如克里斯提到的,你的例子直接与Point类有关,所以后者更合适。
答案 2 :(得分:1)
都不是。最好的设计如下:
class Position {
final int x;
final int y;
}
interface Positionable {
Position getPosition();
}
class Entity implements Positionable {
private Position p;
public Position getPosition() {
return position;
}
}
推理:
Position
进化 - 也许您想要添加z
坐标Position
不可变Position
传递而不包含在较重物体中的行李Position
添加方法,例如float distanceFrom (Position p)
Position
超过其描述的对象Position
请注意Point
是可变的,因此从良好的设计角度来看,使用它或扩展它是不合适的,因为不可变性似乎是这样一个类的明智选择(它被认为是Point
可变的错误 - 对于其他“java中的错误”,请参阅this answer)