我正在编写一个 Ray Tracer,我有一个 Vec3 类,它是一个典型的数学向量,具有 3 个坐标:X、Y 和 Z。我还创建了一个包含 3 个组件的 Color 类:R、G 和 B。在写了相当多的代码之后,我开始注意到 Color 基本上是一个 Vec3。我开始为 Color 编写许多与 Vec3 相同的方法。看到 DRY 代码是可行的方法,我想合并这两个类,所以我不必为这两个类编写相同的代码。
就目前而言,这里是类:
class Vec3{
public static final int X=0,Y=1,Z=2;
double components[];
...
// Constructors and Methods
}
class Color extends Vec3{
public static final int R=0,G=1,B=2;
int components[];
...
// Constructors and Methods
}
这两个类之间的唯一区别是 Vec3 对其组件使用双精度,而 Color 使用整数。除了数据的类型,所有的方法都完全相同。我最初的想法是尝试创建一个泛型类型 T 的 BaseVec3 类,然后在子类中声明该类型。但是,当然,泛型需要一个类,而不是原语。
有什么方法可以让我拥有一个单一的方法代码库但具有不同的原始数据类型?
编辑:我可能应该注意到我已经用 Python 和 C 编程了一段时间,而且自从我接触 Java 以来已经有一段时间了。所以,我对这个问题的第一直觉回答是否定的。