이런 사람이 왜 나에게 설명 할 수 :제네릭 및 유형의 삭제
여기전체 예를
public class Array<E> {
public E[] elements = (E[]) new Object[10];
public E get(int idx) {
return elements[idx]; // Ignore bound-checking for brevity.
}
public static void doSomething(Array<Integer> arr) {
Integer good = arr.get(0);
Integer bad1 = arr.elements[0];
Integer bad2 = ((Integer[]) arr.elements)[0];
Integer bad3 = (Integer) arr.elements[0];
// `bad1', `bad2', and `bad3' all produce a
// runtime exception.
}
public static void main(String[] args) {
Array<Integer> test = new Array<>();
Array.doSomething(test);
}
}
:
http://pastebin.com/et7sGLGW
I 유형의 삭제에 대한 읽기 및 유형 검사를 실현 한이 컴파일시 수행 그리고 E
은 단순히 Object
으로 바뀌기 때문에 우리는 모두 public Object[] elements
이지만, 일반적인 캐스팅이없는 곳에서 get
메서드가 성공하는 이유는 무엇입니까? get
의 메소드 리턴 유형도 지워지지 않습니까?
감사합니다.
런타임 예외가 발생하지 않지만 컴파일하고 요소를 작성하기 위해 추가 코드를 추가해야했지만 코드와 다를 수 있습니다. 나는 좀 더 완전한 예를보아야 할 필요가 있다고 생각한다. – ajb
Java에서 제네릭과 배열이 함께 작동하지 않습니다. – hoaz
@hoaz 제네릭과 배열의 특정 조합은 Java에서 불법이며 컴파일러에서 오류를 표시합니다. 그러나 프로그램이 컴파일되면 프로그램이 예상대로 실행되어야한다고 생각하지만 질문자는 런타임 예외가 있음을 말합니다. 그러나, 나는 그것을 얻을 수 없었다. – ajb