일반 Java 메서드에 유형 인수를 명시 적으로 전달할 수없는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/24991

  •  09-06-2019
  •  | 
  •  

문제

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에 대한 후속 조치 : 반환되어야하는 어떤 유형의 목록이므로 해당 예제는 다음과 같아야합니다. 라코 디스

하지만 네, 클래스 객체를 전달하는 것이 분명히 더 나은 것입니다.나의 유일한 주장은 친숙 함이며,이 정확한 경우에는 그다지 가치가 없습니다 (사실 나쁘다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top