定义
public static void printList(List<?> list) {
for (Object elem : list){
System.out.println(elem + " ");
}
}
public static <T> void printList2(List<T> list) {
for (T elem : list){
System.out.println(elem + " ");
}
}
使用
MyList.printList(Arrays.asList(1, 2, 3));
MyList.printList2(Arrays.asList(1, 2, 3));
<?> 는 제한 없이 임의로 작성 가능합니다.
<T> T가 나타나는 장소는 동일한 일반 유형이어야 합니다.
효과는 동일하지만 <T> T가 나타나는 장소가 동일한 유형이어야 한다는 것은 아닙니다. 실제로 위의 두 가지 메서드는 List와 List
그러나 두 번째 사용법은 실제 개발에 아무런 역할을 하지 않습니다. 제네릭이 반환 값을 선언하는 유형이 아니거나 클래스 수준에서 선언되지 않는 한 이유는 무엇입니까? 예를 들어
으아아아또는
으아아아효과가 있었습니다.
그렇지 않으면 이렇게 사용하세요
public static <T> void fun1(List<T> list)
여기서 제네릭의 역할은 무엇인가요? 실제로 어떤 효과가 있는지는 알 수 없습니다. 이런 식으로 사용할 필요는 없다고 말해야합니다.
? T와 T는 모두 불확실한 유형을 나타내지만 T를 사용하면 return <T>t;와 같은 객체 작업을 수행할 수 있습니다. 이 경우 T를 대신 사용해야 할까요? .
List<?>
은List<T>
의 상위 클래스이며List<?>
List<T>
을 사용할 수 있는 모든 곳에서 사용할 수 있습니다.