다음 메서드는 generic이지만 유용성이 무엇인지 알고 싶습니다. <T>
?은 정적이면서 무효화되기 전의 <T>
입니다. 내 방법으로 쓰지 않으면 어떻게 될까?일반 메서드 <T> Java에서
public static <T> void nameMethod(BinaryTreeNode<T> t){
/*do something
.
.
*/
}
고맙습니다.
다음 메서드는 generic이지만 유용성이 무엇인지 알고 싶습니다. <T>
?은 정적이면서 무효화되기 전의 <T>
입니다. 내 방법으로 쓰지 않으면 어떻게 될까?일반 메서드 <T> Java에서
public static <T> void nameMethod(BinaryTreeNode<T> t){
/*do something
.
.
*/
}
고맙습니다.
<T>
은 메소드의 전체 컨텍스트에 대한 유형 매개 변수를 정의합니다. 지금까지 내가 말할 수있는 건,이 특별한 경우에, 그것은 참으로 그러나
public static void nameMethod(BinaryTreeNode<?> t) {
에 해당 될 것입니다, 당신은 유형 T
을 반환하는 경우, 또는 같은 일반적인 유형의 하나 개 이상의 매개 변수가있는 경우, 형식 매개 변수를 선언하여 컴파일러에서 형식을 식별하는 참조 점을 갖도록해야합니다. 예를 들어 :
public static <T> List<T> mergeSort(List<T> l1, List<T> l2) {
//...
}
<T>
매개 변수는 List
이 동일한 제네릭 형식이어야합니다 반환 모두 List
들뿐만 아니라 전달되는 컴파일러를 알려줍니다.
우리가 T
에 대한 추가 정보를 선언 할 때 더욱 유용
public static <T extends Number> List<T> asList(T... numbers) {
//build list with Number-specific logic...
}
편집 : 나는 나의 첫 번째 점에 대해 잘못되었습니다. 추가 매개 변수 나 반환 유형을 사용하지 않아도 <T>
을 선언하는 데 사용할 수 있습니다. List
을 사용하여 간단한 예제를 제공합니다. 이후 BinaryTreeNode
에 익숙하지 않습니다. 우리는 형식 매개 변수를 제거하고 List<?>
과 같은 매개 변수를 선언한다면
public static <T> void duplicateFirstElement(List<T> l) {
T elm = l.get(0);
l.add(elm);
}
는리스트와 상호 작용하면서 제네릭 형식을 유지하는 방법이 없습니다.
왜 보지 않으시겠습니까? – awksp
어떤 경우에는 코드가 컴파일되지 않지만 그 이유를 알 수는 없습니다. 단지 작성해야한다는 것을 알고 있지만 이유를 알고 싶습니다. – user3721105