Table des matières
1. Que sont les génériques
2. Syntaxe générique
3. Limite supérieure des génériques
4, caractère générique
(1) Limite supérieure du caractère générique
5、包装类
Maison Java javaDidacticiel Analyse des exemples de génériques Java et de classe wrapper

Analyse des exemples de génériques Java et de classe wrapper

Apr 21, 2023 pm 07:19 PM
java

1. Que sont les génériques

L'essence des génériques est de paramétrer les types (contrôler les types spécifiques de paramètres formels à travers différents types spécifiés par les génériques sans créer de nouveaux types).

Regardons d'abord l'exemple suivant :

Le tableau que nous avons appris auparavant ne peut stocker que des éléments de types spécifiés. Par exemple : int[] array=new int[10];String[] array=new String[10];La classe Object est la classe parent de toutes les classes, pouvons-nous donc créer un tableau Obj ?

class Myarray{
    public Object[] array=new Object[10];
    public void setVal(int pos,Object val){
        this.array[pos]=val;
    }
    public Object getPos(int pos){
        return this.array[pos];
    }
}
public class TestDemo{
    public static void main(String[] args) {
        Myarray myarray=new Myarray();
        myarray.setVal(1,0);
        myarray.setVal(2,"shduie");//字符串也可以存放
        String ret=(String)myarray.getPos(2);//虽然我们知道它是字符串类型,但是还是要强制类型转换
        System.out.println(ret);
    }
}
Copier après la connexion

Après l'implémentation du code ci-dessus, nous avons trouvé :

  • Tout type de données peut être stocké

  • Le fichier numéro 2 est à l'origine une chaîne, mais il faut le forcer à taper la conversion

pour introduisez les génériques, le but des génériques est de spécifier quel type d'objet le conteneur actuel doit contenir et de laisser le compilateur le vérifier par lui-même.

2. Syntaxe générique

class Nom de classe générique < Liste des paramètres de type > {

//Les paramètres de type peuvent être utilisés ici

}

Utilisation de génériques :

Classe générique nom de la variable = nouveau Classe générique (argument de la méthode du constructeur)

MyArray list=new MyArray<>();

【Remarque】

  • Le <> espace réservé, indiquant que la classe actuelle est une classe générique

  • Lors de l'instanciation d'un générique, <> ne peut pas être un type simple, il doit s'agir d'une classe wrapper

  • <>Ne participe pas au composition de types de génériques

  • Impossible de créer de nouveaux tableaux de types génériques

  • L'utilisation de génériques ne nécessite pas de conversion de type forcée

Un générique simple :

//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
//在实例化泛型类时,必须指定T的具体类型
public class Test<T>{ 
    //key这个成员变量的类型为T,T的类型由外部指定  
   private T key;
 
    public Test(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
        this.key = key;
    }
 
    public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
        return key;
    }
}
Copier après la connexion

Mécanisme d'effacement : les types dans <> lors de la compilation, donc les éléments <> ne participeront pas à la composition du type. Effacera T comme objet.

Pourquoi ne puis-je pas instancier un tableau de type générique ?

Une différence importante entre les tableaux et les génériques réside dans la manière dont ils appliquent la vérification de type. Les tableaux stockent et vérifient les informations de type au moment de l'exécution, tandis que les génériques vérifient les erreurs de type au moment de la compilation.

Le tableau Object renvoyé peut stocker tout type de données, telles qu'une chaîne, qui est reçu via un tableau de type int. Le compilateur le considère comme dangereux.

3. Limite supérieure des génériques

Syntaxe :

nom de classe générique {

}

Exemple :

classe publique MyArray{} //E uniquement peut être un nombre ou une sous-classe de Number

classe publique MyArray>{}

//E doit être une classe qui implémente l'interface Comparable

[Note] E sans limites spécifiées, peut être considéré comme E étend l'objet

4, caractère générique

 ? Pour une utilisation dans les génériques, il s'agit d'un caractère générique. Les caractères génériques sont utilisés pour résoudre le problème selon lequel les types anti-génériques ne peuvent pas être covariants.

Les deux morceaux de code suivants :

代码一:
public static<T> void printList1(ArrayList<T> list){
   for(T x:list){
      System.out.println(x);
   }
}
 
代码二:
public static<T> void printList2(ArrayList<?> list){
   for(Object x:list){
      System.out.println(x);
   }
}
Copier après la connexion

Les caractères génériques sont utilisés dans le code 2. Par rapport au code 1, nous ne connaissons pas le type de données spécifique transmis dans le code 1 pour le moment.

(1) Limite supérieure du caractère générique

Syntaxe :

Exemple : Pour la relation suivante, nous devons écrire une méthode pour imprimer la liste qui stocke Animal ou Sous-classes d'animaux.

Animal
Cat étend Animal

Dog étend Animal

Code 1 :
public static <t extends Animal> void print1(List<T> list>{
    for(T animal:list){
        System.out.println(animal);//调用了T的toString
    }
}
Copier après la connexion

À l'heure actuelle, le type T est une sous-classe d'Animal ou de lui-même.

Code 2 : implémenté via des caractères génériques

public static void print2(List<? extends Animal> list){
    for(Animal animal:list){
       Syatem.out.println(animal);//调用了子类的toString方法
    }
}
Copier après la connexion

La différence entre les deux codes :

    Pour la méthode implémentée par les génériques, restreint T et ne peut être qu'une sous-classe d'Animal. Passez Cat, c'est Cat.
  • Pour les méthodes implémentées par des caractères génériques, cela équivaut à stipuler Animal et à autoriser la transmission des sous-classes d'Animal. La sous-catégorie spécifique n’est pas claire pour le moment. Par exemple : lorsque Cat est transmis, le type déclaré est Animal. Ce n'est qu'en utilisant le polymorphisme que la méthode toString de Cat peut être appelée
  • Limite supérieure des caractères génériques→ utiliser des caractères génériques pour déterminer le type parent-enfant

MyArrayList est la classe parent de MyArrayList ou MyArrayList

MyArrayList ce qui est stocké dans la liste peut être Number ou une sous-classe de Number, et le type ne peut pas être déterminé.

La limite supérieure du caractère générique convient à la lecture mais pas à l'écriture.

(2) Limite inférieure du caractère générique

    Syntaxe :
  • //Le type de paramètre qui peut être transmis est Integer ou la classe parent de Entier

  • Relation de classe parent-enfant de la limite inférieure générique :

MyArrayList是MyArrayList的父类类型

MyArrayList<?>是MyArrayList的父类

通配符下界适合写入元素,不适合读取。

5、包装类

在Java中,由于基本类型不是继承自Object,为了在泛型中可以支持基本类型,每个基本类型都对应了一个包装类。除了Integer和Character,其余基本类型的包装类都是首字母大写。

拆箱和装箱:

int i=10;
 
//装箱操作,新建一个Integer类型对象,将i的值放入对象的某个属性中
Integer ii=i;  //自动装箱
//Integer ii=Integer.valueOf(i);
Integer ij= new Integer(i);//显示装箱
 
//拆箱操作,将Integer对象中的值取出,放到一个基本数据类型中
int j=ii.intValue();//显示的拆箱
int jj=ii;//隐式的拆箱
Copier après la connexion

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 de ce site Web
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

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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles