Skip to content

2.5 Use enumerated types

Weverton edited this page Aug 31, 2016 · 12 revisions

Lembretes:

  • Construtor para enum só é permitido private;
  • Um enum herda de java.lang.Enum, sendo assim não pode herdar de outras classes;
  • Um enum pode implementar interfaces;
  • Um enum não pode ser definido dentro de método ou construtor;
  • Um enum pode ser definido como um membro static de uma classe;
  • Uma classe pode ter multiplos public enum dentro dela;

Na label do switch deve ser utilizado o unqualified name no enum.

public class Teste10 {

	public static void main(String[] args) {
		Switch s = Switch.OFF;

		switch (s) {
		case Switch.OFF: // Deve ser utilizado somente o OFF
			System.out.println("It is off!");
			break;
		}
	}
}

enum Switch {
	ON, OFF
}


Exemplo de enum:

enum Title {
	MR("Mr. "), MRS("Mrs. "), MS("Ms. ");

	private String title;

	private Title(String s) {
		title = s;
	}

	public String format(String first, String last) {
		return title + " " + first + " " + last;
	}
}

Invalido, não pode chamar o método format devido o mesmo não ser static.

class TestClass {
	void someMethod() {
		System.out.println(Title.format("Rob", "Miller"));
	}
}

Isso não pode:

class TestClass {
	void someMethod() {
		Title.DR dr = new Title.DR("Dr. ");
	}
}

Em um enum não é permitido acessar um non-final static field no construtor.

enum Pets {
	DOG("D"), CAT("C"), FISH("F");
	static String prefix = "I am ";
	String name;
	Pets(String s) { 
		name = prefix + s; //Erro de compilação
	}
	
	public String getData(){ return name; } 
}

Como o enum e a class são public, eles devem ser definidos em arquivos com os seus respectivos nomes.
Abaixo isso no mesmo arquivo não compila.

public enum EnumA{ A, AA, AAA };  

public class TestClass {}
Clone this wiki locally