我想为数学向量编写一个类(持有实数)。我发现,不管向量的尺寸如何,Vector操作几乎都是相同的,因此与其编写诸如Vector2D
,Vector3D
,Vector4D
之类的类,...我只想编写一个Vector
类。
现在的问题是我无法将2D向量与4D向量相乘,因此我想到了一个字段dimension
。但是现在我必须检查所有操作,所以我问自己是否可以做得更好。这是我想到的仿制药。但是再说一次,我必须要做类似Vector<? extends Dimension>
的操作,其中Dimension
只是Dimension.One
和Dimension.Two
等的基类,这意味着我必须为要在其中使用vectos的每个维度编写一个Dimension
类。
所以我的问题是:
有没有一种方法可以为任意维度的矢量编写一个类而无需在运行时检查维度?
最佳答案
如果我正确理解了您的问题,那么答案是您不能同时拥有两者。您要么使用类型系统来确保正确的维数,然后最终导致显式类型的泛滥(泛型将无济于事),要么使用状态来跟踪维并在每次执行操作时执行动态检查。
由于向量的“维数”是向量包含的元素数,因此将在底层数据结构中以某种方式表示。例如,如果使用列表将值存储在向量中,则列表会知道其中包含多少个元素。因此,进行简单的运行时检查很便宜,并且在尺寸不匹配时可以引发异常。与基于类型的解决方案相比,该解决方案更加灵活且易于编程。
关于java - 一类任意维数的数学 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10862447/