Maison > Questions et réponses > le corps du texte
定义
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));
天蓬老师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
伊谢尔伦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.
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; .
黄舟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>