Maison >Java >javaDidacticiel >Comment fonctionne le paramètre de type générique Enum de Java « E extends Enum » ?

Comment fonctionne le paramètre de type générique Enum de Java « E extends Enum » ?

DDD
DDDoriginal
2024-11-26 04:22:17582parcourir

How Does Java's Enum Generic Type Parameter `E extends Enum` Work?

Définition Java Enum : Comprendre les génériques avec les paramètres de type

La classe Enum de Java utilise un paramètre de type particulier qui peut sembler déroutant au premier abord :

class Enum<E extends Enum<E>>

Ce paramètre signifie qu'un type d'énumération doit dériver d'un autre type d'énumération avec le même argument de type. En pratique, l'argument type est le type enum lui-même, comme le montre cet exemple :

public enum StatusCode extends Enum<StatusCode>

Dans ce scénario, E est équivalent à StatusCode. Ainsi, E étend Enum, répondant aux exigences du paramètre.

Cette construction permet à l'API Enum de se référer à elle-même, comme dans Enum implémente Comparable. La classe de base peut effectuer des comparaisons tout en garantissant que seules les énumérations appropriées sont comparées.

Un concept similaire est observé en C# avec les interfaces de ProtocolBuffers :

public interface IBuilder<TMessage, TBuilder>
  where TMessage : IMessage<TMessage, TBuilder> 
  where TBuilder : IBuilder<TMessage, TBuilder>

public interface IMessage<TMessage, TBuilder>
  where TMessage : IMessage<TMessage, TBuilder> 
  where TBuilder : IBuilder<TMessage, TBuilder>

Cela garantit que les messages et les générateurs peuvent être associé de manière appropriée.

Il convient de noter que le paramètre type n'empêche pas les incohérences. Par exemple, les types suivants seraient valides :

public class First extends Enum<First> {}
public class Second extends Enum<First> {}

Dans ce cas, Second implémenterait Comparable au lieu de Comparable, ce qui peut entraîner un comportement inattendu. Cependant, l'intention du paramètre type est d'offrir des avantages dans des cas valides, pas nécessairement d'imposer une utilisation cohérente.

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