Dificuldades com Enums[RESOLVIDO]

10 respostas
K

seguinte galera… vi alguns posts sobre enums, porém não consegui aplicar corretamente, funcionou em partes… vou explicar…
eu tenho uma classe em C q eu uso Enum mas mudou um pouco…

meu enum em C é assim

enum EstadoImpressora {
    SEM_ESTADO = -2,
    OFFLINE = -1,
    WARNING = 0,
    ONLINE = 1,
    EM_USO = 2
};

tenho uma classe q tem esse tipo e qnd pega algo do BD instancia assim:

...
l_impressora->estado = (EstadoImpressora )dmBD->qryAux1->FieldByName("estado")->AsInteger; 
...

eu recebo um inteiro do BD e consigo definir meu objeto…
e pra definir um tipo declarado no Enum eu faço assim

...
EstadoImpressora status;
...
(estado = " + IntToStr( OFFLINE )

como eu faria esse dois casos em Java?? saõ tipo inteiros q eu uso…

[]'s galeraresolvido

10 Respostas

marciocamurati

Olá,

Esse artigo da Java World acho que resolve sua dúvida:

http://www.javaworld.com/javaworld/jw-07-1997/jw-07-enumerated.html

[]s

davidbuzatto
public enum EstadoImpressora {
    
    // lista das enums
    SEM_ESTADO( -2 ),
    OFFLINE( -1 ),
    WARNING( 0 ),
    ONLINE( 1 ),
    EM_USO( 2 );

    // construtor da enum
    EstadoImpressora( int v ) {

        setValor( v );

    }

    public void setValor( int v ) {

        valor = i;

    }

    public int getValor() {

        return valor;

    }

    private int valor;

}
Como usar
EstadoImpressora ep = EstadoImpressora.SEM_ESTADO;
Como pegar o valor
ep.getValor();

Falow!

K

desculpa davidbuzatto pela minha burrice, mas eu nao enetdni…
tipo… a parte de EstadoImpressora.SEM_ESTADO; trank…
pq eu sei o status q eu quero…

sei usar…
o prblema é q no meu BD eu tenho o valor inteiro 1, e tenho q descobrir qual “ESTADO” ele pertence…

em C um cast funciona, ele sabe q o valor 1 do Bd é igual ao ONLINE,
o caminho inverso q preciso descobrir como faz, no meu select funcionou tranks. eu usei

String sql = "select * from imp where id = "+ EstadoImpressora.SEM_ESTADO+""
funcoi no final
select * from imp where id = 1

preciso do inverso… recebo o numero 1 e tenho q colocar no meu contrutor do Obejto q tem um tributo tipo EstadoImpressora.

vlw pela ajuda de vcs

[]´s

davidbuzatto

String sql = "select * from imp where id = "+ EstadoImpressora.SEM_ESTADO.getValor() + "";

É só chamar o método que obtém o valor que vc precisa, que no caso é getValor(), ele vai retornar -2 que é o valor associado a enum SEM_ESTADO.

Falow!

K

eu denovo :oops:

meu problema é aki! rssss eu tenho o numero 1 no BD to fzendo um

public void teste() {
    EstadoImpressora l_estado;
    ....
    l_estado = rs.getInt("id_estado")
    ....
}

dá erro aki! ele pega um inteiro e precisa converter num estado entendeu?

vlw pelo Help brother!
[]´’s

T
import java.util.*;

enum Numeros {
    TEN(10), 
    HUNDRED(100), 
    THOUSAND(1000);
    
    private final int valor; // note que uma enum não deve mudar de valor!
    // portanto não deve haver um método "setValor".
    public int getValor() { return valor; }
    Numeros (int valor) {
        this.valor = valor;
    }
    public static Numeros getInstance (int v) {
        switch (v) {
            // este "switch" é reconhecidamente meio "porco". 
            // Alguém pode mostrar uma solução melhor para este problema?
            case 10: return TEN;
            case 100: return HUNDRED;
            case 1000: return THOUSAND;
            default: throw new IllegalArgumentException ("Solicitado um enum inexistente (valor = " + v + ")");
        }
    }
}

class TesteEnum2 {
    public static void main(String[] args) {
        Numeros num = Numeros.TEN;
        System.out.println (num.ordinal()); // imprime 0
        System.out.println (num.getValor());  // imprime 10
        num = Enum.valueOf (Numeros.class, "TEN"); // deve retornar Numeros.TEN
        System.out.println (num); // imprime TEN
        num = Numeros.getInstance (100); // deve retornar Numeros.HUNDRED
        System.out.println (num); // imprime HUNDRED
        num = Numeros.getInstance (1); // deve lançar uma exceção
    }
}
danieldestro

davidbuzatto:
... public void setValor( int v ) { valor = i; } }

Não vejo nenhum sentido em um Enun ter um setValor().

K

vlw galera pela ajuda!!

to usando o código do Thingol…

agradeço a todos!
[]´s

T

Notem que até existe um “Enum.valueOf”, mas ele é orientado para strings, não para o valor ordinal da enum. Isso é uma coisa legal que não existe no C++, por exemplo.

davidbuzatto

Falei merda né hehehehe :smiley:
Foi malz…

Criado 19 de agosto de 2006
Ultima resposta 22 de ago. de 2006
Respostas 10
Participantes 5