일반 Java 메서드에 유형 인수를 명시 적으로 전달할 수없는 이유는 무엇입니까?
문제
Java 함수를 정의했습니다. 라코 디스
이름을 부르는 한 가지 방법은 다음과 같습니다. 라코 디스
제네릭 유형 인수를 명시 적으로 전달하여 호출 할 수없는 이유는 무엇입니까?: 라코 디스
컴파일러에서 오류 Illegal start of expression
를 받았습니다.
해결책
Java 컴파일러가 정적 메소드에 대해 매개 변수 유형을 스스로 추론 할 수없는 경우 항상 완전한 메소드 이름 인 Class를 사용하여 전달할 수 있습니다.<유형> method (); 라코 디스
다른 팁
유형을 메소드 매개 변수로 전달하면 가능합니다. 라코 디스
메소드는 타입이 할 수있는 것과 같은 방식으로 제네릭 화 될 수 없습니다. 따라서 동적 타입의 제네릭 반환 타입을 가진 메서드의 유일한 옵션은별로입니다 :-)-타입을 다음과 같이 전달하는 것입니다. 인수.
Java 제네릭에 대한 정말 훌륭한 FAQ는 Angelika Langer의 제네릭 FAQ 를 참조하십시오.
.
.
후속 조치 :
이 맥락에서 Collection.toArray( T[] )
에서처럼 배열 인수를 사용하는 것은 이치에 맞지 않습니다. 배열이 사용되는 유일한 이유는 동일한 (사전 할당 된) 배열이 결과를 포함하는 데 사용되기 때문입니다 (배열이 모든 항목에 맞을만큼 충분히 큰 경우). 이렇게하면 항상 런타임에 새 어레이를 할당 할 필요가 없습니다.
그러나 교육 목적으로 배열 유형을 사용하려는 경우 구문은 매우 유사합니다. 라코 디스
Java의 이러한 부분을 파헤친 지 꽤 오랜 시간 이었지만 ...
이 작업을 할 수없는 이유는 아마도 언어 개발자의 디자인 선택이었을 것입니다.그래도 Java에서 사용하는 유형 삭제 로 인해, 제네릭 정보는 어쨌든 컴파일 타임에 삭제되므로 귀하의 예제에서는 유형 매개 변수가 있든 없든 정확히 동일한 바이트 코드를 생성합니다.
@pauldoo 네, 당신 말이 맞습니다.자바 제네릭 imho의 약점 중 하나입니다.
나는 Cheekysoft에 대한 응답으로 T [] AbstractCollection # toArray (T [] a).Cheekysofts 버전이 우수하다고 생각하지만 Java 버전은 친숙하다는 장점이 있습니다.
수정 : 링크가 추가되었습니다. 재 편집 : SO에서 버그 발견 :) <시간>
Cheekysoft에 대한 후속 조치 : 반환되어야하는 어떤 유형의 목록이므로 해당 예제는 다음과 같아야합니다. 라코 디스
하지만 네, 클래스 객체를 전달하는 것이 분명히 더 나은 것입니다.나의 유일한 주장은 친숙 함이며,이 정확한 경우에는 그다지 가치가 없습니다 (사실 나쁘다).