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

定义

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

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

répondre à tous(4)
Peter_Zhu

<?> peut être écrit arbitrairement sans restrictions,

<T> nécessite que les endroits où T apparaît soient du même type générique

伊谢尔伦

L'effet est le même, mais <T> n'exige pas que les endroits où T apparaît soient du même type. En fait, les deux méthodes ci-dessus sont compilées en bytecode et List<?>

Mais le deuxième usage ne joue aucun rôle dans le développement réel. Pourquoi, à moins que le générique soit le type qui déclare la valeur de retour, ou qu'il soit déclaré au niveau de la classe. Par exemple

private static <T> T fun1(List<T> list) {
}

ou

public interface Main<T> {
    public void fun(T t);
}
//然后

public class MainImpl<String> {
    @override
    public void fun(String str) {
    }
}

Cela a fonctionné.

Sinon, utilisez-le comme ça public static <T> void fun1(List<T> list)
Quel est le rôle des génériques ici ? Je ne vois vraiment pas quel effet cela a. Il faut dire qu’il n’est pas nécessaire de l’utiliser de cette façon.

Ty80

? T et T représentent tous deux des types incertains, mais l'utilisation de T peut effectuer des opérations sur les objets, telles que return <T>t; .

黄舟

List<?> est la superclasse de List<T> et peut être utilisée partout où List<?> peut être utilisée List<T>

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal