私はレイ トレーサーを作成しており、X、Y、Z の 3 つの座標を持つ典型的な数学ベクトルである Vec3 クラスを持っています。また、R、G、B の 3 つのコンポーネントを保持する Color クラスも作成しました。かなりの量のコードを書いた後、Color は基本的に Vec3 であることに気付き始めました。Vec3 で行ったのと同じように、Color についても同じメソッドをたくさん書き始めました。DRY コードが進むべき道であることを見て、2 つのクラスをマージしたかったので、両方のクラスに同じコードを書き続ける必要はありませんでした。
現状では、クラスは次のとおりです。
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
}
2 つのクラスの唯一の違いは、Vec3 はコンポーネントに double を使用し、Color は int を使用することです。データの種類を除けば、すべてのメソッドはまったく同じです。私の最初の傾向は、ジェネリック型 T の BaseVec3 クラスを作成してから、サブクラスで型を宣言することでした。しかしもちろん、ジェネリックにはプリミティブではなくクラスが必要です。
単一のメソッドコードベースを使用できますが、プリミティブデータ型が異なる方法はありますか?
編集:おそらく、私はしばらくPythonとCでプログラミングしており、Javaに触れてからしばらく経っていることに注意する必要があります。したがって、この質問に対する私の最初の直感的な答えはNOです。