私はマトリックスライブラリ(教育目的)を作成しようとしており、障害に達しています猶予でアプローチする方法がわかりません。 2つの行列を追加するのは簡単な作業です。それぞれの行列の要素ごとにget()メソッドを個別に使用します。抽象クラスメソッド - 子クラスオブジェクトをインスタンス化するには?
しかし、私が使った構文は間違っています。 NetBeansはクラスを期待していると主張していますが、型パラメータを見つけました。私には、型パラメータは、クラスのセットへの1:1マッピングを持つ単なるセットです。
ここで私は間違っていますか?私は以前に型パラメータがクラス以外の何かであることは見たことがないので、次のビットはMをクラスとするべきではないでしょうか?
Mがマトリックス
public abstract class Matrix<T extends Number, M extends Matrix>
{
private int rows, cols;
public Matrix(int rows, int cols)
{
this.rows = rows;
this.cols = cols;
}
public M plus(Matrix other)
{
// Do some maths using get() on implicit and explicit arguments.
// Store result in a new matrix of the same type as the implicit argument,
// using set() on a new matrix.
M result = new M(2, 2); /* Example */
}
public abstract T get(int row, int col);
public abstract void set(int row, int col, T val);
}
Matrixクラスには、それ自体が拡張された型があるのはなぜですか? –
@ cricket_007私の推論は、関数plus()は、そのクラスがMatrixを継承しているオブジェクトを返すべきだと考えています。私がそれを打ち明けると、本当にばかげて聞こえます。たぶん、戻り値の型は単に行列でなければなりません。しかし、私はplus()関数の中で行列をインスタンス化できません。それは抽象クラスなので。 –
正確な型がわからないので、型パラメータ 'M'を直接インスタンス化することはできません。 – Andrew