问下这两个java的泛型方法的写法不一样, 但效果一样, 使用场景有何不同
怪我咯
怪我咯 2017-04-18 10:48:45
0
4
618

定义

    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));
怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답(4)
Peter_Zhu

<?> 는 제한 없이 임의로 작성 가능합니다.

<T> T가 나타나는 장소는 동일한 일반 유형이어야 합니다.

伊谢尔伦

효과는 동일하지만 <T> T가 나타나는 장소가 동일한 유형이어야 한다는 것은 아닙니다. 실제로 위의 두 가지 메서드는 List와 List 모두 하위 수준으로 컴파일됩니다.

그러나 두 번째 사용법은 실제 개발에 아무런 역할을 하지 않습니다. 제네릭이 반환 값을 선언하는 유형이 아니거나 클래스 수준에서 선언되지 않는 한 이유는 무엇입니까? 예를 들어

으아아아

또는

으아아아

효과가 있었습니다.

그렇지 않으면 이렇게 사용하세요 public static <T> void fun1(List<T> list)
여기서 제네릭의 역할은 무엇인가요? 실제로 어떤 효과가 있는지는 알 수 없습니다. 이런 식으로 사용할 필요는 없다고 말해야합니다.

Ty80

? T와 T는 모두 불확실한 유형을 나타내지만 T를 사용하면 return <T>t;와 같은 객체 작업을 수행할 수 있습니다. 이 경우 T를 대신 사용해야 할까요? .

黄舟

List<?>List<T>의 상위 클래스이며 List<?>List<T>을 사용할 수 있는 모든 곳에서 사용할 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿