Java 编写通用物理向量类

Java 编写通用物理向量类,java,generics,physics,Java,Generics,Physics,谷歌很难找到解决方案,因为我对矢量数据结构不感兴趣。我对物理向量感兴趣。我试图创建一个泛型类来包装向量的任何数字类型。这是我原来的双向量: 然而,在将其移植到泛型类时,我遇到了一些改性剂。这就是我到目前为止所做的: public class Vector2D<T extends Number> { private T x, y; Vector2D (T x, T y){ this.x = x; this.y = y; }

谷歌很难找到解决方案,因为我对矢量数据结构不感兴趣。我对物理向量感兴趣。我试图创建一个泛型类来包装向量的任何数字类型。这是我原来的双向量:

然而,在将其移植到泛型类时,我遇到了一些改性剂。这就是我到目前为止所做的:

public class Vector2D<T extends Number> {
    private T x, y;

    Vector2D (T x, T y){
        this.x = x;
        this.y = y;
    }

    public static Vector2D random() {
        return new Vector2D(Math.random() * 2 - 1, Math.random() * 2 - 1);
    }

    public T magnitude(){
        //this gives an error: cannot cast from double to T
        return (T)Math.sqrt(this.x.doubleValue() * this.x.doubleValue() + this.y.doubleValue() * this.y.doubleValue());
    }
}

我被数量和随机性所困扰。我真的被难住了。关于如何完成这些方法的任何指导?

即使编译得很好,最终也会得到类似Vector2D intVector=Vector2D.random的代码;但random是用double填充值,double最多只能被装箱成double,而double不能被转换成我们所需要的整数。我怀疑如果只为数字类型创建这样的类是可能的,我们已经在Java中有了它们,但我可能错了。@Pshemo那么关于如何编写建议的类有什么想法吗?我怀疑如果只为数字类型创建这样的类是可能的,我们已经在Java中有了它们,所以没有,我认为不可能创造出你想要的东西。您可能希望为不同的数据类型创建单独的方法,如将创建Vector2d的randomInt、Vector2d的randomDouble等。但你们仍然需要解决向量运算的问题,比如加法、减法、缩放,这涉及到对向量中的值进行运算,但*或+不能和数字一起使用。你们为什么还要这样做呢?如果您关心内存空间,请使用浮动。如果您特别需要ints的另一种数据类型,则必须创建一种不同的数据类型。由于泛型只能使用包装类,而且Java不支持用户值类型结构,所以必须按照@Pshemo所说的去做。这在像C这样的语言中并不是一个问题。。。
public class Vector2D<T extends Number> {
    private T x, y;

    Vector2D (T x, T y){
        this.x = x;
        this.y = y;
    }

    public static Vector2D random() {
        return new Vector2D(Math.random() * 2 - 1, Math.random() * 2 - 1);
    }

    public T magnitude(){
        //this gives an error: cannot cast from double to T
        return (T)Math.sqrt(this.x.doubleValue() * this.x.doubleValue() + this.y.doubleValue() * this.y.doubleValue());
    }
}