ここで問題が何かわかりません。基本的には、2-dマトリックスの要素に対処するための疑似セマンティックapiが必要です。配列に読み書きする(想定されているランダムな)ことに注意してください。私たちはあなたがスレッド問題を扱っていないと仮定します。
Foo、Foo [] []型の2次元配列は、確実に動作します。あなたは基本的にそれを包む必要があります。
public class Matrix<T> {
public interface Quadrant<T> {
T get(int i, int j);
void set(T v, int i, int j);
}
public static final int XDIM = 4;
public static final int YDIM = 4;
private final Object[][] matrix = new Object[XDIM][YDIM];
public Matrix() { /* .. */ }
public Quadrant<T> quadrant(final int x, final int y) {
return new Quadrant<T>() {
@SuppressWarnings("unchecked")
@Override public final T get(int i, int j) {
return (T) matrix [x+i][y+j]; // todo: range checks, etc.
}
@Override public final void set(T v, int i, int j) {
matrix [x+i][y+j] = v; // todo: range checks, etc.
}
};
}
public static void main(String[] args) {
Matrix<Object> m = new Matrix<Object>();
m.quadrant(2, 2).set("hi there!", 0, 1);
System.out.format("{%d, %d}:(%d, %d) => %s\n", 2, 2, 0, 1, m.quadrant(2, 2).get(0, 1));
}
}
これは私の目的のほとんどを解決します。私はもう一つ変えようとしています。象限も行列であるので、m.quadrant(2、2)を呼び出すときに象限の代わりに型行列を返す方法があります。 – turbo
とにかくこれを切ってスライスします。たとえば、Matrixをインターフェイスにし、MatrixからQuadrantを拡張します。 –
alphazero