java - 强制参数与子类类型相同

标签 java

我正在创建一些数学 (Java) 类(class),我需要两个、三个和四个维度的 vector (用于处理 3D 图形)。我决定创建一个抽象父类(super class) Vector,它实现所有常见行为,例如缩放、加法、减法和点积。

我的问题是:有什么方法可以表达(在编译时强制执行,而不是在运行时执行)执行点积的第二个 vector 必须与点积所在的子类具有相同的类型(因为他们必须有相同的维度)? (是否有更有效的方式来实现 vector ?)我的代码如下所示:

public abstract class Vector {

    protected float[] coordinates;

    protected Vector(float[] coordinates, int length) {
        this.coordinates = Arrays.copyOf(coordinates, length);
    }

    public float int dotproduct(/* Type? */ vector) {
        // do something
    }
}

class Vector2 extends Vector {
    // stuff
}

class Vector3 extends Vector {
    // stuff, including outer product
}

最佳答案

您需要使您的 Vector 类具有它的子类型。这称为 F-bound type (或者只是递归类型):

public abstract class Vector<T extends Vector<T>> {

    protected float[] coordinates;

    protected Vector(float[] coordinates, int length) {
        this.coordinates = Arrays.copyOf(coordinates, length);
    }

    public float int dotproduct(T vector) {
        // do something
    }
}

然后:

class Vector2 extends Vector<Vector2> {
    // stuff
}

class Vector3 extends Vector<Vector3> {
    // stuff, including outer product
}

关于java - 强制参数与子类类型相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41958604/

相关文章:

java - 无法在 Android 应用程序中使用 Google 登录

java - Java和C之间的浮点类型有什么区别吗?

java - 如何创建 ImageIcon 的实例

java - 使用 util.zip 压缩文件 无目录

java - 斯坦福主题建模工具箱 : not being able to compile with maven

java - 在 ArrayList 中查找成本最低的项目

java - Spring如何在收到交易时刷新页面?

java - 使用 Java 客户端和 JBoss Web 服务实现推送技术

java - JVM 优化会破坏我的代码吗?

java - 使用 USB 电缆打印问题