我不确定这里的问题是什么。基本上你只需要一个伪语义API来寻址2维矩阵的元素。你注意到(推测是随机的)读取和写入数组。我们假设你没有处理线程问题。
Foo,Foo [] []类型的2-dim数组当然可以工作。你基本上需要包装它。
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扩展Quadrant。 –
alphazero