[Java Basics] comprendre les génériques

Sa guitare en bois 2021-11-25 17:48:45
java basics comprendre les riques

「C'est ma participation11Le défi du mois de juin6Oh, mon Dieu.,Voir les détails de l'événement:2021Un dernier défi

Quels sont les génériques?

JavaGénéralités( generics) - Oui.JDK 5Introduction⼊De⼀Nouvelles fonctionnalités;

InDéfinitionCatégorie、Interface、Utiliser le paramètre de type pour la méthode,InRemplacer lorsqu'il est utiliséDans un type spécifique;

Les génériques sont largement utilisés dans les cadres de classe set;

Les avantages:

La vérification du type de paramètre peut être effectuée avant la compilation;

Peut améliorer la réutilisabilité du Code,Par ListExemple d'interface

Besoin de stockage StringEt IntegerDe List,Non.⽤Généralités, StockageStringType à écrire⼀- Oui.ListInterface, StockageIntegerIl faut écrire autre chose.⼀- Oui.ListInterface, Les génériques peuvent très bien résoudre ce problème.

Les génériques dans le Code

Classe générique

public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Copier le Code

Interface générique

public interface List<E> extends Collection<E>
Copier le Code

Approche générique

public E get(int index) {
rangeCheck(index);
return elementData(index);
}
Copier le Code

Types de paramètres et signification des génériques

Type de paramètre générique Sens
E-Element Appliquer à la collection , Substituant de type comme élément
T - Type Java Substituant de type pour le paramètre de classe
K - Key & V - Value M ap Substituant de type clé
Indique une incertitudejavaType( Type de Joker illimité )
Object Le type de paramètre est la classe racine de toutes les classes
<? extends T> Qualificatif wildcard,Le type doit êtreTType ouTSous - catégories
<? super T> Qualificatif wildcard,Le type doit êtreTType ouTParent de

Effacement générique

JavaCompilateur Mappe plusieurs instances génériques de la classe à une représentation Bytecode unique , C'est - à - dire l'effacement de type (type erasue).

Exemple

List Et List Type égal Après compilationSont devenus List(Effacement générique).JVM L'objet d'instance de classe obtenu est le même ListObjet.

List<String> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
System.out.println(list1.getClass() == list2.getClass());// true
Copier le Code

La vérification de type générique avant compilation peut être contournée par réflexion

List<Integer> list = new ArrayList<>();
list.add(123);
try {
// Parce queList Le paramètre générique dans n'a pas de limite supérieure définie ,Alors...addÇa marche.addN'importe quoiObject Paramètre de sous - type pour
Method method = list.getClass().getDeclaredMethod("add", Object.class);
method.invoke(list, "string");
method.invoke(list, true);
method.invoke(list, 12.3);
list.forEach(e -> System.out.println("e = " + e));
} catch (Exception e) {
e.printStackTrace();
}
--------------------------------------------------------
true
e = 123
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at java.util.ArrayList.forEach(ArrayList.java:1257)
at reflection.Main.main(Main.java:29)
Copier le Code

Lorsque le générique rencontre une surcharge

Erreur de compilation, Parce qu'après l'effacement générique , Les signatures des paramètres sont les mêmes pour les deux méthodes .

版权声明
本文为[Sa guitare en bois]所创,转载请带上原文链接,感谢
https://javamana.com/2021/11/20211125174842995z.html

  1. La distribution Linux d'Amazon est maintenant entièrement basée sur Fedora
  2. org.springframework.web.bind.MissingServletRequestParameterException
  3. Built in constraints and functions of MySQL Foundation (2)
  4. Basic operation of MySQL Foundation (I)
  5. Introduction to Java zero foundation 3: Java data types
  6. 从零开始搭建EasyDarwin环境——Linux系统开发环境搭建Golang
  7. Redis source Concise Analysis 02 - SDS String
  8. Construire l'environnement easydarwin à partir de zéro - - construire l'environnement de développement du système Linux golang
  9. javaweb代码是正确的,但是第一行代码就报错了
  10. **** | Java | 后端开挂:3行代码写出8个接口
  11. Java || 看了大二学长写的代码,我竟开始默默的模仿了。。。
  12. Java | 手把手教你实现一个抽奖系统(Java版)
  13. Java | Manuel pour vous apprendre à mettre en œuvre un système de loterie (version Java)
  14. Java | | après avoir lu le Code que j'ai écrit en deuxième année, j'ai commencé à imiter silencieusement...
  15. Java | back - end Pending: 3 - line Code write 8 Interfaces
  16. Le Code Web Java est correct, mais la première ligne de code est incorrecte
  17. Android网络编程之Http通信
  18. Android網絡編程之Http通信
  19. Http communication for Android Network Programming
  20. 数据结构实验八 领会图的两种主要储存结构和图的基本运算算法设计
  21. Hibernate数据校验简介
  22. The story of spring
  23. Il a dépensé 270 000 yuans pour soulever Xiaopeng p7 et a parcouru 3 627 km. Le propriétaire du véhicule a partagé 6 avantages et inconvénients.
  24. 阿里蚂蚁花呗团队面试题:spring+分布式+jvm+session+redis
  25. 【Java入门100例】14.字符串排序——compareTo()
  26. 【Java入门100例】13.修改文件扩展名——字符串替换
  27. Leetcode 79. Word Search [C + + / java detailed problem]
  28. Introduction à la vérification des données hibernantes
  29. Expérience de la structure des données
  30. Spring cloud gateway practice 2: more routing configuration methods
  31. Java network programming - summary overview
  32. 基于语法树的 Java 代码自动化插桩
  33. 云原生 Spring Boot 应用配置 Prometheus + Grafana 监控(保姆级)
  34. Spring cloud gateway practice 2: more routing configuration methods
  35. Jenkins file one line of code to deploy. Net program to k8s
  36. Java network programming - summary overview
  37. Cloud Native Spring Boot application configuration Prometheus + grafana Monitoring (baby - sitter)
  38. Insertion automatique de code Java basée sur l'Arbre syntaxique
  39. Le SUV phare de Xiaopeng, Xiaopeng G9, a fait ses débuts au salon de l'automobile et s'est tenu en position C dans la nouvelle force?
  40. Docker 从入门到实践系列四 - Docker 容器编排利器 Docker Compose
  41. 6年老猿带你掌握Spring Boot实现定时任务的动态增删启停
  42. disruptor笔记之六:常见场景,java教程从入门到精通pdf百度云
  43. Pourquoi InnoDB n'utilise - t - il pas un cache LRU naïf?
  44. Java Reflection (2): quelques opérations de base de reflection
  45. 6年老猿帶你掌握Spring Boot實現定時任務的動態增删啟停
  46. Les singes âgés vous permettent de maîtriser le démarrage et l'arrêt dynamiques des tâches programmées par Spring boot
  47. Docker From Beginning to Practice Series IV - docker Container chorégraphe Clean docker Composition
  48. 编写 java 程序,为家用电脑 ipv6 自动更新 goddy dns 记录(ddns)
  49. java jvm-old gc耗时几十s,导致系统告警
  50. Disruptor note 6: scénario commun, tutoriel Java de l'introduction à la maîtrise du PDF Baidu Cloud
  51. 编写Java程序启动脚本最佳实践
  52. How to get the correct Linux user's documents, music videos and other directories?
  53. Java JVM Old GC prend des dizaines de s, ce qui provoque une alarme système
  54. Écrivez un programme Java pour mettre à jour automatiquement les enregistrements DNS goddy (ddns) pour l'ordinateur domestique IPv6
  55. 編寫Java程序啟動脚本最佳實踐
  56. Meilleures pratiques pour écrire des scripts de démarrage de programmes Java
  57. Notes sur springcloud Eureka
  58. Ajout, suppression et modification simples de mybatis
  59. Java - carte mémoire de l'objet
  60. Why did docker lose to kubernetes? Docker employee readme!