Al definir un tipo enum, esencialmente define una clase, pero el compilador llena muchos detalles para usted, por lo que, en cierta medida, el papel de la palabra clave enum es como la clase o la interfaz.
Cuando define un tipo de enumación usando "enum", los tipos que define se heredan esencialmente de la clase java.lang.enum, y el miembro de cada enum es en realidad una instancia del tipo enum que define. Todos están predeterminados al final, por lo que no puede cambiarlos, también son miembros estáticos, por lo que puede usarlos directamente a través del nombre del tipo y, por supuesto, lo más importante, todos son públicos.
Por ejemplo:
Opconstants.javapublic enum opconstants {Turn_left, Turn_right, Shoot} En este ejemplo, los opconstants heredan de java.lang.enum. Cada miembro de Enum como Turn_left, Turn_right, dispara. Todos son instancias de objetos de Opconstants, es decir, instancias de objetos. Naturalmente, hay algunos métodos anteriores. Por ejemplo, el método ToString () se sobrescribe, que le permite obtener directamente la descripción de la cadena del valor enum. El método valores () definido por el objeto Enum le permite obtener todas las instancias de enum y pasarlas de nuevo en una matriz. Utiliza estos dos métodos para mostrar simplemente el contenido de OpConstants:
Showenum.javapublic clase showenum {public static void main (string [] args) {for (opconstants constant: opconstants.values ()) {system.out.println (constant.ToString ()); }}} Básicamente, println () llamará automáticamente a toString (), por lo que en realidad está bien no escribir toString (). El resultado de la ejecución es el siguiente:
Turn_leftturn_rightshoot
Puede usar el método "==" o igual () para comparar los objetos enum. "" == "" comparará si los objetos enumales que proporcione son los mismos (es decir, ocupar la misma ubicación de memoria), mientras que esencialmente comparará el contenido de dos objetos enum. Por defecto, se comparará en función del valor de cadena del enum.
El método ValueOf () le permite intentar convertir la cadena especificada en una instancia de enum. Puede usar el método CompareTo (), que puede comparar el orden de los dos objetos enumeros cuando enumeración. Aquí hay un ejemplo
Showenum.javapublic clase showenum {public static void main (string [] args) {enumCompareto (opconstants.valueOf (args [0])); } public static void enumcompareto (Opconstants constant) {System.out.println (constante); para (OpConstants c: Opconstants.values ()) {System.out.println (constant.compareto (c)); }}} Resultados de la ejecución:
$ java showenum gurn_right
Turn_right10-1
Retroceda un valor positivo, lo que indica que el orden está antes de que se compare el objeto enum, después de que se indica el valor negativo, y 0 significa que las posiciones de los dos valores de enumes comparativos mutuamente son las mismas.
Para cada miembro de enumeración, podemos usar el método Ordinal () para obtener el índice de posición en el orden de enumeración, y el valor predeterminado comienza con 0, por ejemplo:
Showenum.javapublic clase showenum {public static void main (string [] args) {for (opconstants c: opconstants.values ()) {system.out.printf ("%d%s%n", c.ordinal (), c); }}} Resultados de la ejecución:
0 Turn_left1 Turn_right2 Shoot
La palabra clave enum se puede usar para definir una clase enum, y las constantes relevantes se pueden escribir en una clase. Echemos un vistazo a un ejemplo a continuación.
El siguiente código:
class testClass {private testClass () {} // Definir un constructor privado, y no puede instanciar un objeto desde el exterior // proporciona dos instancias A y B Public Static Final TestClass A = New TestClass (); Public Static Final TestClass b = New TestClass ();}Puede usar tipos de enum en su lugar:
enum testClass01 {a, b;}uso:
Un enum también puede tener constructores, campos y métodos:
enum testClass02 {a ("a") // Al crear un objeto, pasar en los parámetros del constructor, b ("b"); valor de cadena privada; Private testClass02 (valor de cadena) {this.value = value; } public String getValue () {return this.Value; }}Las enumeraciones también pueden tener métodos abstractos:
enum testClass03 {a () {// Implementar el método abstracto public type () {System.out.println ("excelente"); }}, B () {public void type () {System.out.println ("bueno"); }}; public abstract void type (); // Definir método abstracto}Método de prueba:
public class test02 {public static void main (String [] args) {print (testClass02.a); // pausa en parámetros enum} public static void imprim (testClass02 t) {system.out.println (t.getValue ()); } enum testClass02 {a ("a"), b ("b"); valor de cadena privada; Private testClass02 (valor de cadena) {this.value = value; } public String getValue () {return this.Value; }}}Resultados de ejecución:
Aauthor: Iniciar firma: siempre que aún lo intentes, no es un fracaso.