私はボードをモデリングしています。可能な限り一般的なものにしたいと思っていました。Java Generics:Java 2D汎用配列のこの例でのキャストを避けるにはどうすればよいですか?
また、私のコードは今のところ完全に動作していますが、Cellクラスの作業を開始してすぐに問題があることがわかります。
Cell.java
public class Cell<T> {
private t value;
public Cell(T value) {
this.value = value;
}
// setters and getters
}
Board.java
import java.lang.reflect.Array;
public abstract class Board<T, E extends Cell<T>> {
protected E[][] cells;
protected Board(Class<? extends E> c) {
cells = (E[][])Array.newInstance(c, 6, 7);
}
protected void resetBoard(T resteVal) {
for (int i = 0; i < cells.length; i++)
for (int j = 0; j < cells[i].length; j++)
cells[i][j]= (E) new Cell<T>(); //HERE IS THE QUESTION
}
}
Game.java
public interface Game {
boolean islegalMove();
boolean isWin();
void move();
void resetGame();
void getScore();
}
Connect4.java
public class Connect4<E extends Cell<Integer>> extends Board<Integer,E> implements Game {
public Connect4(Class<? extends E> c) {
super(c);
}
// override methods
}
core probleは正しいアーキテクチャではありません(クラスキャストは正確にそれについて述べています)。これはこの問題の正しい修正ではありません。 –
何を手に入れませんでしたか? – Ele
問題は、この場合、Cellクラスを継承するクラスにアクセスすることができず、これはEを意味のないものにします。 –