recherche
MaisonJavajavaDidacticielExplication détaillée d'exemples de génériques en Java

1. Définition

Le générique fait référence à la possibilité de paramétrer les types. Vous pouvez définir une classe ou une méthode avec un type générique, puis le compilateur la remplace par un type concret (instanciation générique). Le principal avantage de l’utilisation des génériques est la possibilité de détecter les erreurs au moment de la compilation plutôt qu’au moment de l’exécution. C'est une fonctionnalité apparue après jdk1.5 pour renforcer la sécurité. Je crois comprendre qu'il s'agit plutôt d'une spécification spéciale. Par exemple, lorsque le programmeur l'appelle ou lorsque le client l'introduit, il ne peut pas mélanger le bien et le bien. Il peut faire ce qu'il veut. ! La définition précédente disait que si vous entrez un type String, si vous désobéissez ici, il n'est pas nécessaire de vous laisser continuer l'exécution et vous serez tué directement.

2. Inconvénients des génériques non définis

1 Attention, pas de paramétrage générique

2. dedans, ce qui est dangereux

3. Lors de la récupération des données dans la collection, transfert forcé

import java.util.Iterator;import java.util.Set;import java.util.TreeSet;public class Test {public static void main(String[] args) {
        Set treeSet = new TreeSet();//没有使用泛型,应该这样:Set<student> treeSet = new TreeSet<student>();treeSet.add(new Student(11, 80, "李平"));
        treeSet.add(new Student(23, 40, "王芳"));
        treeSet.add(new Student(10, 60, "赵磊"));
        treeSet.add(new Student(12, 40, "王小二"));
        treeSet.add(new Student(10, 60, "马苗"));
        treeSet.add(new Student(18, 60, "马苗"));
        treeSet.add(new Student(25, 70, "姜浩"));

        Iterator it = treeSet.iterator();while (it.hasNext()) {
            Student stu = (Student) it.next();//没有使用泛型:需要强转            System.out.println(stu);
        }

    }
}</student></student>

compiler Commencer à signaler les erreurs (jaune) :

Après modification :

Remarque : Les types génériques doivent soyez des types de référence! ! !

Remarque : les types génériques doivent être des types de référence ! ! !

Remarque : les types génériques doivent être des types de référence ! ! !

3. Formulation de génériques

Dans JDK on voit souvent les trois situations suivantes :

1.TreeSet(Collection extends E> c)

2.TreeSet(Comparator super E> comparateur)

3.TreeSet( SortedSet

où,

 ? Le caractère générique fait référence à tout type de données auquel

(Comme on peut le voir, 3 est la définition normale des génériques)

Remarque ci-dessous :

La limite supérieure des génériques : étend E > Type, ou sous-type de E
Limite inférieure des génériques : super E > // Indique la réception du type de E, ou le type parent de E

Exemple de code :

//这时这个函数只能接收 Number及其子类static void show(Point extends Number> p){ 
        System.out.println(p.getX());
        System.out.println(p.getY());
    }    public static void main(String[] args) {/* 对于上面的声明,下面的操作是可以的
        Point<integer> p1=new Point<integer>();
        p1.setX(new Integer(90));
        p1.setY(new Integer(50));
        show(p1);      *///下面的操作将出错Point<string> p1=new Point<string>();
        p1.setX("90ok");
        p1.setY("50ok");
        show(p1); //出错</string></string></integer></integer>
  show(Point  String>  <string> p1= Point<string>"90ok""50ok"</string></string>

(photos d'Internet)

4. Comprendre l'application des génériques.

Nous pouvons personnaliser les classes génériques, les méthodes génériques et les interfaces génériques. Vous devez connaître son principe lors de l'apprentissage, et vous pourrez volontiers l'appeler dans le JDK à l'avenir ~~

1 Classe générique personnalisée

class ObjectFactory<t> { // 声明泛型為<t>private T obj;public T getObj() {return this.obj;
    }public void setObj(T obj) {this.obj = obj;
    }/* * 下面的写法不成立 public T getNewObj(){ T t=new T(); //在编译期,无法确定泛型的参数化的类型 return
     * t; }     */}class Test4 {public static void main(String[] args) {// List list=new ArrayList();/* * ObjectFactory f=new ObjectFactory(); f.SetObj("ss");         */ObjectFactory<string> f = new ObjectFactory<string>();
        f.setObj("这里必须是String");// f.SetObj(89); 不可以String obj = f.getObj();
        System.out.println(obj);

        ObjectFactory<student> stuList = new ObjectFactory<student>();

        stuList.setObj(new Student(67, 90, "张三"));
        stuList.getObj().speak();
    }
}</student></student></string></string></t></t>
<.>

2. Méthodes génériques

public class TestFan {    // 泛型方法,这里不做限制,传什么都可以public <t> void show(T t) {
        System.out.println("这是泛型方法中的" + t);
    }
}class Test5 {public static void main(String[] args) {
        TestFan tfan = new TestFan();
        
        tfan.show("777");
        
        tfan.show(898);
        
        tfan.show(new Student(30, 20, "猫"));
    }
}</t>

3. 🎜>

5. Restrictions génériques1 Vous ne pouvez pas utiliser de paramètres génériques pour créer des instances, c'est-à-dire que vous ne pouvez pas utiliser new E()

2. Les classes d'exception ne peuvent pas être génériques

3 Les paramètres d'une classe ne peuvent pas être de types génériques dans un environnement statique (remarque)

Étant donné que toutes les instances d'un générique. class are Il existe la même classe d'exécution, donc les variables statiques et les méthodes de la classe générique sont partagées par toutes ses instances. Puisqu'il est partagé, il n'est pas nécessaire de redéfinir le même type générique. Si vous ne définissez pas le même type générique et ne parvenez pas à réaliser le partage (ou la cohérence), il n'est pas nécessaire de laisser passer cette situation. Par conséquent, il est illégal de définir des paramètres de classe sur des génériques dans un environnement statique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?Mar 17, 2025 pm 05:46 PM

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.

How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?Mar 17, 2025 pm 05:45 PM

L'article discute de la création et de l'utilisation de bibliothèques Java personnalisées (fichiers JAR) avec un versioning approprié et une gestion des dépendances, à l'aide d'outils comme Maven et Gradle.

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?Mar 17, 2025 pm 05:44 PM

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?Mar 17, 2025 pm 05:43 PM

L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?Mar 17, 2025 pm 05:35 PM

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft