Cet article vous apporte des connaissances pertinentes sur java, qui présente principalement les problèmes liés à l'énumération, y compris les opérations de base de l'énumération, la prise en charge de l'énumération par classes de collection, etc.
Étude recommandée : "Tutoriel vidéo Java"
L'énumération consiste à permettre à la valeur d'un certain type de variable d'être seulement une parmi plusieurs valeurs fixes, sinon le compilateur signalera une erreur, énumération Cela permet le compilateur pour contrôler les valeurs illégales attribuées par le programme source au moment de la compilation. Cet objectif ne peut pas être atteint pendant la phase de développement en utilisant des variables ordinaires.
Après JDK1.5, utilisez le mot-clé enum pour définir un nouveau type, appelé type d'énumération
L'énumération (enum), la classe (class) et l'interface (interface) sont au même niveau
pour définir une couleur, seules trois couleurs de rouge, vert et bleu peuvent être définies
méthode commune
Alors comment résoudre ce problème pour que la couleur ne puisse choisir qu'une des trois couleurs ? ? ?
La classe d'énumération définie à l'aide du mot-clé enum équivaut en fait à définir une classe, qui hérite uniquement de la classe Enum.
public enum Color { RED, GREEN, BLUE;}
protected Enum(String name,int ordinal)
Ce constructeur ne peut pas être appelé directement de l'extérieur et n'est accessible que par ses sous-classes Ce constructeur Le. la méthode est automatiquement appeléeprotected Enum(String name,int ordinal)
此构造方法不能被外部直接调用,只能被其子类访问,此构造方法为自动调用public final String name()
返回枚举的名字public String toString()
返回枚举的名字public final int ordinal()
返回枚举的序号,默认从0开始public final boolean equals(Object other)
判断两个枚举是否相同
代码
public class EnumTest { public static void main(String[] args) { //定义一个color变量,只能设置为RED、GREEN、BLUE Color color = Color.BLUE; System.out.println(color); System.out.println(color.name()); System.out.println(color.toString());//三种方式都是打印名字 System.out.println(color.ordinal());//返回枚举的序号RED--0、GREEN--1、BLUE--2 Color[] values = Color.values();//返回所有枚举类型 System.out.println(Arrays.toString(values)); }}
枚举的本质是一个继承Enum类的子类,JVM编译器把枚举编译后生成一个
final class
枚举不允许从外部调用,所以只能是private修饰
构造方法只能在对象中调用
public enum Color { RED(10), GREEN(20), BLUE; private int Number;//属性 private Color() {//默认构造方法 System.out.println("无参构造器被调用了!!!"); } private Color(int Number) { this.Number = Number; System.out.println("有参构造器被调用了!!!"); } public int getNumber(){ return Number; }}
主方法
public class EnumTest { public static void main(String[] args) { Color color = Color.RED; System.out.println(color.name()); System.out.println(color.getNumber());//获取Number的值 }}
在枚举类型中,可以继承接口,实现接口有两种方法,要么在枚举类中实现该方法,或者在对象内部实现该方法
方式1:在枚举对象内部实现接口中的方法
interface info{ public String getColor();}public enum Color implements info{ RED{ @Override public String getColor() {return "红色";} }, GREEN{ @Override public String getColor() {return "绿色";} }, BLUE{ @Override public String getColor() {return "蓝色";} };}
方式2:在枚举类中实现接口中的方法
interface info{ public String getColor();}public enum Color implements info{ RED,GREEN,BLUE; @Override public String getColor() { return null; }}
主方法
public class EnumTest { public static void main(String[] args) { Color color = Color.RED; System.out.println(color.getColor()); }}
在枚举类型中,可以定义抽象方法,具体由对象实现
枚举类
public enum Color { RED{ @Override public String getColor() {return "红色";} }, GREEN{ @Override public String getColor() {return "绿色";} }, BLUE{ @Override public String getColor() {return "蓝色";} }; //在枚举中定义一个抽象方法,通过枚举对象实现 public abstract String getColor();}
主方法
public class EnumTest { public static void main(String[] args) { Color color = Color.BLUE; System.out.println(color.getColor()); }}
枚举是用来保证数据在指定范围内的值,如果枚举中只有一个类型(一个值)的话,枚举中就只有一个对象,那么就可以实现单例模式。
枚举类
public enum Singletion { SINGLETION; public void Method(){ System.out.println("使用枚举实现单例模式!!!"); }}
主方法
public class EnumTest { public static void main(String[] args) { Singletion singletion=Singletion.SINGLETION; singletion.Method(); }}
在JDK1.5之后,对于Set和Map接口而言又增加了两个新的子类:
EnumSet
和EnumMap
public final String name()
Renvoie le nom de l'énumérationpublic String toString()
Renvoie le nom de l'énumération🎜public final int ordinal( )
Renvoie le numéro de série de l'énumération, en commençant à 0 par défaut🎜public final boolean equals(Object other)
Détermine si deux énumérations sont identiques🎜🎜🎜🎜Code🎜🎜🎜🎜🎜Opérations de base des énumérations🎜 🎜Avec structure Énumération des méthodes🎜🎜🎜L'essence d'une énumération est une sous-classe qui hérite de la classe Enum. Le compilateur JVM compile l'énumération et génère uneimport java.util.EnumSet;public class EnumTest { public static void main(String[] args) { EnumSet<color> set = EnumSet.allOf(Color.class);//把一个枚举类型全部填充到集合中去 for (Color c : set) { System.out.println(c.name()); } }}</color>Copier après la connexionCopier après la connexionclasse finale
🎜🎜🎜🎜L'énumération n'est pas autorisée. à appeler de l'extérieur, il ne peut donc s'agir que d'une modification privée🎜🎜🎜🎜Les méthodes de construction ne peuvent être appelées que dans des objets🎜🎜🎜🎜🎜Méthode principale🎜🎜rrreee🎜🎜🎜L'énumération implémente l'interface🎜🎜🎜Dans le type énumération, vous pouvez hériter de l'interface. Il existe deux façons d'implémenter l'interface, soit d'implémenter la méthode dans la classe énumération, ou implémentez la méthode à l'intérieur de l'objet 🎜🎜🎜🎜Méthode 1 : Implémentez les méthodes dans l'interface à l'intérieur de l'objet d'énumération🎜🎜rrreee🎜🎜Méthode 2 : Implémentez les méthodes dans l'interface dans la classe d'énumération🎜🎜rrreee🎜🎜Méthode principale🎜 🎜rrreee🎜🎜🎜L'énumération implémente des méthodes abstraites 🎜🎜🎜Dans l'énumération Dans le type énumération, vous pouvez définir des méthodes abstraites, qui sont spécifiquement implémentées par des objets🎜🎜🎜🎜classe d'énumération🎜🎜rrreee🎜🎜méthode principale🎜🎜rrreee🎜🎜🎜L'énumération implémente le mode singleton🎜🎜🎜L'énumération est utilisée pour garantir que les données se trouvent dans le plage spécifiée.Si l'énumération S'il n'y a qu'un seul type (une valeur) dans l'énumération, alors il n'y a qu'un seul objet dans l'énumération, alors le modèle singleton peut être implémenté. 🎜🎜🎜🎜Classe d'énumération🎜🎜rrreee🎜🎜Méthode principale🎜🎜rrreee🎜🎜🎜Prise en charge des classes Set pour les énumérations🎜🎜🎜Après JDK1.5, deux nouvelles sous-classes ont été ajoutées aux interfaces Set et Map :import java.util.EnumMap;public class EnumTest { public static void main(String[] args) { EnumMap<color> map = new EnumMap(Color.class); map.put(Color.RED, "红色"); map.put(Color.GREEN, "绿色"); map.put(Color.BLUE, "蓝色"); System.out.println(map.get(Color.RED)); }</color>Copier après la connexionCopier après la connexionEnumSet
etEnumMap
sont deux sous-classes🎜
一个专门
Set
实现与枚举类型一起使用。 枚举集中的所有元素都必须来自创建集合时明确或隐式指定的单个枚举类型EnumSet
是一个抽象类,不能直接创建实例对象,但是可以通过方法来使用。EnumSet.allOf(Class<e> elementType)</e>
把一个枚举类型全部填充到集合中去public static <e extends enum>> EnumSet<e> complementOf(EnumSet<e> s)</e></e></e>
创建与指定枚举集具有相同元素类型的枚举集,最初包含此类型的所有元素,该元素 不包含在指定的集合中。public static <e extends enum>> EnumSet<e> copyOf(EnumSet<e> s)</e></e></e>
创建与指定的枚举集相同的元素类型的枚举集,最初包含相同的元素(如果有)
代码
import java.util.EnumSet;public class EnumTest { public static void main(String[] args) { EnumSet<color> set = EnumSet.allOf(Color.class);//把一个枚举类型全部填充到集合中去 for (Color c : set) { System.out.println(c.name()); } }}</color>
EnumMap
一个专门Map实现与枚举类型键一起使用。 枚举映射中的所有密钥必须来自创建映射时明确或隐式指定的单个枚举类型。 枚举地图在内部表示为数组。 这种表示非常紧凑和高效。
代码
import java.util.EnumMap;public class EnumTest { public static void main(String[] args) { EnumMap<color> map = new EnumMap(Color.class); map.put(Color.RED, "红色"); map.put(Color.GREEN, "绿色"); map.put(Color.BLUE, "蓝色"); System.out.println(map.get(Color.RED)); }</color>
推荐学习:《java视频教程》
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!