Avatar billede kjole Nybegynder
05. april 2007 - 20:36 Der er 16 kommentarer og
1 løsning

Enum halløj

Hvorfor virker følgende ikke?

public enum enum1{
    a,b,c; 
}
private enum1 eee;

// contructor
c(int k) {
    eee = (enum1)k;
}

Det bruges i forbindelse med ind og udtræk fra en database
Avatar billede arne_v Ekspert
05. april 2007 - 20:43 #1
I java kan du ikke caste mellem enums og ints.
Avatar billede kjole Nybegynder
05. april 2007 - 20:46 #2
Hvordan tager jeg så int værdi fra databasen og laver den til en enum?
Avatar billede erikjacobsen Ekspert
05. april 2007 - 20:53 #3
En switch?

  switch (val) {
    case 1: eee=a; break;
    ...
  }
Avatar billede kjole Nybegynder
05. april 2007 - 20:55 #4
Det er da utrolig grimt, det må da kunne gøres på en bedre måde?
Avatar billede arne_v Ekspert
05. april 2007 - 20:59 #5
jeg ville bruge en switch fordi det er god dokumentation for hvad der sker

men hvis vil bruge noget andet saa proev:

int myint = myenum.ordinal();
eee myenum = arraywithallenums[myint];
Avatar billede erikjacobsen Ekspert
05. april 2007 - 21:08 #6
Og den tredie muilghed er at lade være med at bruge enum, fordi Java ikke understøtter en sammenhæng til den underliggende int. Hvad med  static final int a = 1;  (osv) ?
Avatar billede kjole Nybegynder
05. april 2007 - 21:15 #7
Okay tak for det, I deler pointene.

Er det muligt at bruge enum i forbindelse med webservices?
Avatar billede erikjacobsen Ekspert
05. april 2007 - 21:17 #8
Ingen point til mig, tak. Du skal overføre en int eller navnet som en string, så du kommrt ikke udenom kode i begge ender.
Avatar billede erikjacobsen Ekspert
05. april 2007 - 21:28 #9
Men du skulle kunne en 4. mulighed (jeg har vist aldrig prøvet):

public enum Coin {
    PENNY(1), NICKEL(5), DIME(10), QUARTER(25);

    Coin(int value) { this.value = value; }

    private final int value;

    public int value() { return value; }
}
Avatar billede erikjacobsen Ekspert
05. april 2007 - 21:29 #10
Avatar billede arne_v Ekspert
05. april 2007 - 21:33 #11
det er meget bevidst at Java ikke understoetter brug af enums som int

svar fra mig

jeg tvivler paa at WS-I tillader brug af enum, men jeg er ikke sikker - det vil jeg
vaere noedt til at undersoege lidt naermere
Avatar billede kjole Nybegynder
05. april 2007 - 21:37 #12
Tak Erik for dine ivrige svar. Arne_v for alle pointene efter dit ønske om ikke få nogle.

Arne kan du forklare hvad fordelen er ved at adskille int og enums,da de i mange andre sprog har tæt knytning?
Avatar billede arne_v Ekspert
05. april 2007 - 21:40 #13
proev og koer dette C# program hvor der castes mellem enum og int lidt kreativt:

using System;

namespace X
{
    public enum Fruits { Apples, Oranges, Grape };
    public enum Cars { Ford, Toyota, Mercedes };
    public enum Colors { Red, Green, Blue };
    public class TestClass
    {
        public static void Main(string[] args)
        {
            Fruits fru = Fruits.Grape;
            Cars car = Cars.Mercedes;
            Colors col = (Colors)((int)fru / (int)car);
            Console.WriteLine(col);
        }
    }
}
Avatar billede arne_v Ekspert
05. april 2007 - 21:42 #14
ved design af Java er der lagt meget vaegt paa at forhindre programmoerer i at
skyde sig selv i foden
Avatar billede kjole Nybegynder
05. april 2007 - 22:05 #15
Okay.Tak for det:) Kigger på lige på C# senere.
Avatar billede jakoba Nybegynder
05. april 2007 - 22:19 #16
// din erklæring bliver lidt klumpet

enum enum1{
        a, b, c;
        static final Map<String,Integer> convertMap = new HashMap<String,Integer>();
        static {
            i = 0;
            for (enum1 c : enum1.values())
                convertMap.put(c.toString(), i++);
        }
        static enum1 getFromNr( int i ) {
            for (enum1 c : enum1.values()) {
                if( i = Map.get( c.toString() ).valueOf() ) return c;
            }
            //buu huu, vi fandt den ikke. indsæt fejlhåndtering her
        }
    }

// men når den er overstpået er det ret nemt:

private enum1 eee;

// contructor
c(int k) {
    eee = enum1.getFromNr(k);
}

mvh JakobA
Avatar billede jakoba Nybegynder
06. april 2007 - 01:18 #17
pladder. Det var alt for kompliceret (og fuldt af fejl)

enum enum1{
    a, b, c;
    static enum1 getFromNr( int i ) {
    int j=0;
        for (enum1 c : enum1.values()) {
            if( j == i ) return c;
            j++;
        }
        //buu huu, vi fandt den ikke. indsæt fejlhåndtering her
    }//end getFromNr
}//end enum1
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester