Maison Java javaDidacticiel Caractères génériques dans les fonctions Java : limites supérieure et inférieure

Caractères génériques dans les fonctions Java : limites supérieure et inférieure

Apr 25, 2024 pm 04:18 PM
通配符 泛型

En Java, les caractères génériques permettent de représenter des types génériques sans spécifier de types spécifiques. Le caractère générique de limite supérieure (<? extends T>) représente un paramètre de type T ou n'importe quelle sous-classe de celui-ci, permettant aux données de sous-classe d'être acceptées dans une liste. Le caractère générique inférieur (<? super T>) représente T ou l'une de ses superclasses, permettant aux données de superclasse de la liste d'être acceptées. Les caractères génériques peuvent être utilisés pour implémenter des listes de tableaux redimensionnables avec des génériques, permettant la gestion de différents types et opérations d'ajout/suppression.

Java 函数中的泛型通配符:上限和下限

Caractères génériques dans les fonctions Java : limites supérieures et inférieures

En Java, nous pouvons utiliser des caractères génériques pour représenter des types génériques, nous permettant d'utiliser des génériques sans spécifier de type concret. Cet article explorera les caractères génériques supérieurs et inférieurs et démontrera leur utilisation à travers des exemples pratiques.

Caractère générique plafonné

Le caractère générique plafonné (<? extends T>) représente un paramètre de type T ou l'une de ses sous-classes. Par exemple : <? extends T>) 表示类型参数 T 或其任何子类。例如:

public static <T extends Number> double sum(List<T> numbers) {
  double total = 0;
  for (T num : numbers) {
    total += num.doubleValue();
  }
  return total;
}
Copier après la connexion

此函数可以接受任何 Number (如 Integer、Double) 或其子类的列表。我们可以安全地将任何满足 Number 约束的列表传递给此函数,如下所示:

List<Integer> ints = List.of(1, 2, 3);
double sumIntegers = sum(ints); // 编译通过
Copier après la connexion

下限通配符

下限通配符 (<? super T>) 表示类型参数 T 或其任何超类。例如:

public static <T super Number> void process(List<T> entities) {
  for (T entity : entities) {
    System.out.println(entity.getClass().getName());
  }
}
Copier après la connexion

此函数可以接受任何 Number 的超类 (如 Object、Serializable) 的列表。我们可以安全地将任何满足 Number 超类约束的列表传递给此函数,如下所示:

List<Object> objects = List.of("Hello", 123);
process(objects); // 编译通过
Copier après la connexion

实战案例

考虑一个可调整大小的数组列表,我们可以使用泛型通配符来实现它:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ResizableArrayList<E> {

  private List<E> list;

  public ResizableArrayList() {
    this(new ArrayList<>());
  }

  public ResizableArrayList(List<? super E> initialList) {
    list = new ArrayList<>(initialList);
  }

  public void addAll(List<? extends E> elements) {
    list.addAll(elements);
  }

  public void removeAll(List<? super E> elements) {
    list.removeAll(elements);
  }

  public List<E> getList() {
    return list;
  }

  public static void main(String[] args) {
    ResizableArrayList<Integer> numbers = new ResizableArrayList<>(
        Arrays.asList(1, 2, 3)
    );
    numbers.addAll(Arrays.asList(4, 5, 6));
    numbers.removeAll(Arrays.asList(2, 3));

    System.out.println(numbers.getList()); // [1, 4, 5, 6]
  }
}
Copier après la connexion

这个可调整大小的数组列表可以处理任何类型 Errreee

Cette fonction peut accepter n'importe quel nombre (tel que Integer, Double) ou une liste de ses sous-classes. Nous pouvons transmettre en toute sécurité n'importe quelle liste qui satisfait la contrainte Number à cette fonction comme suit : 🎜rrreee🎜🎜Caractère générique inférieur🎜🎜🎜Le caractère générique inférieur (<? super T>) représente un paramètre de type T ou l'une de ses superclasses. Par exemple : 🎜rrreee🎜Cette fonction peut accepter une liste de n'importe quelle superclasse Number (telle que Object, Serialisable). Nous pouvons transmettre en toute sécurité n'importe quelle liste qui satisfait aux contraintes de la superclasse Number à cette fonction comme suit : 🎜rrreee🎜🎜 Exemple pratique 🎜🎜🎜 Considérons une liste de tableaux redimensionnable, nous pouvons utiliser des caractères génériques pour y parvenir : 🎜rrreee🎜Cette liste de tableaux redimensionnables peut gérer n'importe quel typeE, nous permettant d'ajouter ou de supprimer divers objets à la liste. 🎜

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

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)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

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)

Les fonctions génériques résolvent-elles le problème des types de paramètres variadiques dans Golang ? Les fonctions génériques résolvent-elles le problème des types de paramètres variadiques dans Golang ? Apr 16, 2024 pm 06:12 PM

Les fonctions génériques dans Go résolvent le problème des types variadiques : les fonctions génériques permettent de spécifier les paramètres de type au moment de l'exécution. Cela permet d'écrire des fonctions capables de gérer des arguments de différents types. Par exemple, la fonction Max est une fonction générique qui accepte deux paramètres comparables et renvoie la plus grande valeur. En utilisant des fonctions génériques, nous pouvons écrire du code plus flexible et général capable de gérer différents types de paramètres.

Explorez les avantages et les utilisations des génériques à Golang Explorez les avantages et les utilisations des génériques à Golang Apr 03, 2024 pm 02:03 PM

Réponse : Les génériques Golang sont un outil puissant pour améliorer la réutilisabilité, la flexibilité, la sécurité des types et l'évolutivité du code. Description détaillée : Avantages : Réutilisabilité du code : algorithmes et structures de données communs Flexibilité : création d'instances de types spécifiques au moment de l'exécution Sécurité des types : vérification du type au moment de la compilation Extensibilité : facile à étendre et à personnaliser Objectif : fonctions communes : tri, comparaison Structures de données communes telles que les listes , cartes, piles, etc. Alias ​​de type : simplifiez les déclarations de type Génériques contraints : assurez la sécurité des types

Quelles sont les limites supérieure et inférieure des fonctions génériques Java ? comment utiliser? Quelles sont les limites supérieure et inférieure des fonctions génériques Java ? comment utiliser? Apr 26, 2024 am 11:45 AM

Les fonctions génériques Java permettent de définir des limites supérieures et inférieures. Extends spécifie que le type de données accepté ou renvoyé par une fonction doit être un sous-type du type spécifié, par ex. La limite inférieure (super) spécifie que le type de données accepté ou renvoyé par une fonction doit être un supertype du type spécifié, par ex. L'utilisation de génériques améliore la réutilisabilité et la sécurité du code.

Scénarios d'application spécifiques des génériques dans Golang Scénarios d'application spécifiques des génériques dans Golang May 04, 2024 am 11:45 AM

Scénarios d'application des génériques dans Go : Opérations de collecte : Créez des opérations de collecte adaptées à tout type, comme le filtrage. Structures de données : écrivez des structures de données à usage général telles que des files d'attente, des piles et des cartes pour stocker et manipuler divers types de données. Algorithmes : écrivez des algorithmes à usage général tels que le tri, la recherche et la réduction qui peuvent gérer différents types de données.

Application des génériques Java dans le développement Android Application des génériques Java dans le développement Android Apr 12, 2024 pm 01:54 PM

L'application de génériques dans le développement Android améliore la réutilisabilité, la sécurité et la flexibilité du code. La syntaxe consiste à déclarer une variable de type T qui peut être utilisée pour manipuler des données paramétrées par type. Les génériques en action incluent des adaptateurs de données personnalisés, permettant à l'adaptateur de s'adapter à tout type d'objet de données personnalisé. Android fournit également des classes de listes génériques (telles que ArrayList) et des méthodes génériques permettant la manipulation de paramètres de différents types. Les avantages de l'utilisation de génériques incluent la réutilisabilité, la sécurité et la flexibilité du code, mais il faut veiller à spécifier les limites correctes et à les utiliser avec modération pour garantir la lisibilité du code.

Comment restreindre les paramètres de type dans les méthodes génériques Java ? Comment restreindre les paramètres de type dans les méthodes génériques Java ? Apr 30, 2024 pm 01:30 PM

Pour restreindre les paramètres de type dans une méthode générique Java, utilisez la syntaxe où Bound est le type ou l'interface. En tant que tels, les paramètres n'acceptent que les types qui héritent de Bound ou implémentent l'interface Bound. Par exemple, limitez T à un type comparable à lui-même.

Quelles sont les limitations des fonctions génériques dans Golang ? Quelles sont les limitations des fonctions génériques dans Golang ? Apr 16, 2024 pm 05:12 PM

Limitations des fonctions génériques Go : seuls les paramètres de type sont pris en charge, les paramètres de valeur ne sont pas pris en charge. La récursion des fonctions n'est pas prise en charge. Les paramètres de type ne peuvent pas être spécifiés explicitement, ils sont déduits par le compilateur.

Quel est l'impact des génériques Golang sur les signatures et les paramètres des fonctions ? Quel est l'impact des génériques Golang sur les signatures et les paramètres des fonctions ? Apr 17, 2024 am 08:39 AM

L'impact des génériques sur les signatures et les paramètres des fonctions Go comprend : Paramètres de type : les signatures de fonction peuvent contenir des paramètres de type, spécifiant les types que la fonction peut utiliser. Contraintes de type : les paramètres de type peuvent avoir des contraintes qui spécifient les conditions qu'ils doivent satisfaire. Inférence de type de paramètre : le compilateur peut déduire le type de paramètres de type non spécifiés. Spécification des types : les types de paramètres peuvent être explicitement spécifiés pour appeler des fonctions génériques. Cela augmente la réutilisabilité et la flexibilité du code, vous permettant d'écrire des fonctions et des types pouvant être utilisés avec plusieurs types.

See all articles