Dúvida: enum

3 respostas
G

Caríssimos,

O código abaixo é de um exercício clássico de enum… compila e roda imprimindo duas vezes “Equals”, como não há import, fui procurar a documentação da classe na java.lang… não encontrei a classe enum, apenas a Enum… alguém me explicaria pq? Outra coisa… na classe Enum do javadoc encontro o método valueOf recebendo como parâmetros um enumType e uma String e no código abaixo o método recebe apenas a String… onde encontro esse método com essa assinatura? é herdado?

Código:
enum Fish {GOLDFISH, ANGELFISH, GUPPY;}

public class EnumTest {
public static void main (String[] args ) {
Fish f = Fish.valueOf(“GUPPY”);
if (f == Fish.GUPPY)
System.out.println(“Equals”);
if (f.equals(Fish.GUPPY))
System.out.println(“Equals”);
}
}

Javadoc Enum:

valueOf

public static <T extends Enum> T valueOf(Class enumType,
String name)

Returns the enum constant of the specified enum type with the specified name. The name must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

Parameters:
    enumType - the Class object of the enum type from which to return a constant
    name - the name of the constant to return 
Returns:
    the enum constant of the specified enum type with the specified name

3 Respostas

ciczan

enum é uma palavra chave que foi introduzida do java 1.5. Na verdade quer dizer que a tua classe extende Enum. Se optou por uma palavra chave nova para que o compilador pudesse ajudar mais o serviço. Se você procurar na internet com certeza vai encontrar algum tutorial.

Esse livro aqui http://www.oreilly.com/catalog/javaadn/index.html tem um capítulo gratis pra download que é só sobre enums.

Quanto a esse metodo que vc fala, é um mátodo estático de Enum. Serve para achar um enum por uma string. Para essa classe que vc mostrou funcionaria assim:

Enums.valueOf(EnumTest.class, "GUPPY");

Isso retorna um EnumTest.GUPPY.

ViniGodoy

A palavra chave faz o Java implementar o typesafe enum pattern, introduzido no JDK 5.

Para ver sobre as origens desse Pattern e como implementa-lo no Java 4, veja o livro do Joshua Bloch, Effective Java.

Você pode ler o item 21, do capítulo 5, aqui.

LPJava

grandegod:
Caríssimos,

O código abaixo é de um exercício clássico de enum… compila e roda imprimindo duas vezes “Equals”, como não há import, fui procurar a documentação da classe na java.lang… não encontrei a classe enum, apenas a Enum… alguém me explicaria pq? Outra coisa… na classe Enum do javadoc encontro o método valueOf recebendo como parâmetros um enumType e uma String e no código abaixo o método recebe apenas a String… onde encontro esse método com essa assinatura? é herdado?

Código:
enum Fish {GOLDFISH, ANGELFISH, GUPPY;}

public class EnumTest {
public static void main (String[] args ) {
Fish f = Fish.valueOf(“GUPPY”);
if (f == Fish.GUPPY)
System.out.println(“Equals”);
if (f.equals(Fish.GUPPY))
System.out.println(“Equals”);
}
}

Javadoc Enum:

valueOf

public static <T extends Enum> T valueOf(Class enumType,
String name)

Returns the enum constant of the specified enum type with the specified name. The name must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

Parameters:
    enumType - the Class object of the enum type from which to return a constant
    name - the name of the constant to return 
Returns:
    the enum constant of the specified enum type with the specified name

-------------------------------------------------------------------

enum - é uma palavra-chave e um tipo de class especial… entao vc nao precisa importa-lo ja q ela faz parte do pacote jva.lang… como a class String vc tb não precisa importa-lo por está nesse pacote… o metodo valueOf ele tem o poder de converter uma String em um objeto. :smiley:

Criado 5 de abril de 2007
Ultima resposta 5 de abr. de 2007
Respostas 3
Participantes 4