Java에서 2 차원 제네릭 배열을 만들려고했습니다. 나는 어떤 컴파일 오류를 얻을 수 없지만, 코드를 실행할 때 나는 예외가 : 나는 두 차원 배열이 방법을 사용할 수없는 것 같습니다2 차원 제네릭 배열 초기화
import java.lang.reflect.Array;
public class Tabela<T> {
private T[][] data;
public Tabela(Class<T[][]> c,int sizeX, int sizeY) {
this.data = c.cast(Array.newInstance(c.getComponentType(), sizeX, sizeY));
}
public void setInfoAt(T info, int x, int y) {
this.data[x][y] = info;
}
public T getObjectAt(int x, int y) {
return this.data[x][y];
}
}
public class TabelaTest {
public static void main(String args[]) {
Tabela<String> tabela = new Tabela<String>(String[][].class, 2, 2);
tabela.setInfoAt("a", 0, 0);
tabela.setInfoAt("b", 0, 1);
tabela.setInfoAt("c", 1, 0);
tabela.setInfoAt("d", 1, 1);
System.out.println(tabela.getObjectAt(1, 0));
}
}
: 여기
Exception in thread "main" java.lang.ClassCastException: Cannot cast [[[Ljava.lang.String; to [[Ljava.lang.String;
at java.lang.Class.cast(Unknown Source)
at Tabela.<init>(Tabela.java:8)
at TabelaTest.main(TabelaTest.java:4)
는 코드입니다.
편집 :
unholysampler의 방법을 사용하면 이제 작동합니다. 생성자로 변경되었습니다 것은 일식이 캐스트 (T [] [])에 대해 내게 경고 유지입니다
public Tabela(Class<T> c,int sizeX, int sizeY) {
this.data = (T[][])Array.newInstance(c, sizeX, sizeY);
}
. 나는 그것을 억누를 수 있지만, 무시해도 될까요? componentType
가 배열 클래스 새로운 배열 가 dimensions.length
의 합 componentType
치수의 수와 동일한 차원 수를 나타내는 경우
미안하지만 실제로 얻지 못했습니다. 나는 T. [] [] 대신에 T로 Array.newInstance를 호출해야한다는 것을 이해하고있다. – lhahn
예. 왜냐하면 Array.newInstance는 2D 배열을 만드는 작업을하기 때문입니다. – NoDataFound
덕분에 이제는 효과가있었습니다. – lhahn