다음 코드를 고려 2 웨이 :자바 매개 변수화 방법의 반환 값 유형은
(new MyClass()).<ExtType>foo(ExtType.class);
흥미 롭다면, 메소드가 매개 변수화 된 것으로 선언 된 경우에도 Eclipse는 호출에 대해 경고를 발행하지 않습니다.
첫 번째 코드 조각에서 T
중 어느 것이 반환 값을 캐스팅하는 데 사용되는지 궁금합니다. 매개 변수는 T
이고 반환 값은 T
입니까? 왜 명시 적으로 반환 형식을 지정하지 않으면 ("1 방향"에서와 같이) 경고가 발행되지 않습니다?
답변 해 주셔서 감사합니다. '(새로운 MyClass()) foo();'가 호출되면'foo()'안에 캐스트가 수행되지 않거나 더 정확하게'Object'에 캐스트 될 것인가? – dhblah
@gasan 캐스트가 계속되지만 반환 된 값을 할당하는 변수의 유형에서 'T'유형이 유추됩니다. – Thomas
@Tomas, 음, 실제로이 코드를 사용하여 검사했습니다 : public class GenericTest { static class MyType {} static class ExtType extends MyType {}; 정적 클래스 MyClass { MyType myField = new MyType(); public T foo() { return (T) myField; } } public static void main (String [] args) { ExtType t = (새 MyClass()). foo(); System.out.println (t); } }'ClassCastException은'foo()'결과를't'에 할당 할 때만 발생하고'foo()'실행 자체는 예외없이 실행됩니다. foo()에 캐스트가 없다는 뜻입니다. –
dhblah