다른 질문에 대한 정보 (테스트)를 보면서 나는 무엇인가를 발견하고 그것이 일어나는 이유를 전혀 몰랐습니다. 지금, 나는이 절대적으로 끔찍한 코드가 있음이이 작업을 수행하는 실질적인 이유가없고, 알고 있지만, 왜 작동하는지 그 것이다 :Generics는 정확히 어떻게 작동합니까?
그래서ArrayList<Quod> test=new ArrayList<Quod>();
ArrayList obj=new ArrayList();
test=obj;
obj.add(new Object());
System.out.println(test.get(0));
는, 기본적으로 내가의 ArrayList를에 객체를 추가하고 Quods. 지금, 나는 자바가 효율적으로 이것을 검사 할 방법이 없다는 것을 알 수있다. 아마 모든 참조를 살펴 봐야 할 것이고 아마 아무 곳에도 저장되지 않을 것이다. 그런데 왜 그것이 작동하는지() 작동합니다. get() 이클립스에서 마우스를 가져갈 때 말한 것처럼 Quod의 인스턴스를 반환한다고 가정하지 않습니까? Quod 유형의 객체를 반환하겠다고 약속했을 때 객체 만 반환 할 수 있다면 int를 반환 할 때 String을 반환 할 수없는 이유는 무엇입니까?
상황이 더 이상합니다. 이 런타임 오류 (java.lang.ClassCastException가 오류)와로 생각 될 때 이것은 충돌 (!?!?) :
ArrayList<Quod> test=new ArrayList<Quod>();
ArrayList obj=new ArrayList();
test=obj;
obj.add(new Object());
System.out.println(test.get(0).toString());
은 왜 있으며, toString이 객체에 호출 할 수 없습니다
? println() 메서드가 toString을 호출하는 것이 왜 괜찮습니까?하지만 직접 호출 할 수는 없습니까?편집 : 난 내가 만들 ArrayList에의 첫 번째 인스턴스로 아무것도 안하고 있어요 것을 알고, 그래서 그것은 본질적으로 처리 단지 시간 낭비입니다.
편집 : Java 1.6에서 Eclipse를 사용하고 있습니다. 다른 이들은 Java 1.8을 실행하는 Eclipse에서 동일한 결과를 얻는다 고 말했습니다. 그러나 다른 컴파일러에서는 두 경우 모두 CCE 오류가 발생합니다.
, 당신은 폐기된다 'test'를 재 할당 할 때 그 참조. – azurefrog
java.lang.ClassCastException 오류 – WiErD0
그래, 내가 ArrayList에 추가하고 있지 않다는 것을 알고. 하지만 출력물이 작동하지 않는 이유는 무엇입니까? –
WiErD0