Maison  >  Questions et réponses  >  le corps du texte

问下这两个java的泛型方法的写法不一样, 但效果一样, 使用场景有何不同

定义

    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));
怪我咯怪我咯2744 Il y a quelques jours570

répondre à tous(4)je répondrai

  • 天蓬老师

    天蓬老师2017-04-18 10:50:45

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

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

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:50:45

    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.

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:50:45

    ? 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; .

    répondre
    0
  • 黄舟

    黄舟2017-04-18 10:50:45

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

    .

    répondre
    0
  • Annulerrépondre