2013-11-09 13 views
10

Quindi quello che sto cercando di fare è questo:Come utilizzare Enums in getter e setter?

Scrivi una classe User

utente:

  • ha un esempio username 'fj3'
  • ha un UserType che può essere: 'utente', 'editore' o 'admin'
  • ha un nome ad esempio 'Francis'
  • ha un costruttore che prende il nome utente, UserType e il nome come parametri
  • ha un metodo getUsername()
  • ha un metodo getUserType()
  • ha un metodo getName()
  • ha un metodo setUserType() corrispondente a uno dei tipi di utente come parametro

il mio codice finora:

public class User{ 

    public String id; 
    public String userPermissions; 
    public String actualName; 

    public User(String username, String userType, String name){ 
     id = username; 
     userPermissions = userType; 
     actualName= name; 
    } 

    public String getUsername(){ 
     return id; 
    } 

    public String getUserType(){ 
     return userPermissions; 
    }  

    public String getName(){ 
     return actualName; 
    } 

    public enum UserType{ 
     admin, editor, user; 
    } 

    public void setUserType(String input){ 
     userPermissions = input; 
    } 
} 

che cosa devo fare per ottenere questo lavoro? Non so come renderlo così gli unici tipi di utente che possono essere scelti sono admin, editor o utente.

+0

convalidare i dati? Utilizzare un elenco di tipi noti? –

+0

_Come dovrei farlo in bluej? _ Lo fai in java, non bluej, bluej è solo un IDE – BackSlash

+0

Dovresti rinominare 'userPermissions' in' userType'. – kelunik

risposta

9

Devi cambiare i tipi di questo enum:

public class User { 
    public enum UserType { 
     ADMIN, EDITOR, USER; 
    } 

    public String id; 
    public UserType userPermissions; 
    public String actualName; 

    public User(String username, UserType userType, String name) { 
     id = username; 
     userPermissions = userType; 
     actualName= name; 
    } 

    public String getUsername() { 
     return id; 
    } 

    public UserType getUserType() { 
     return userPermissions; 
    }  

    public String getName() { 
     return actualName; 
    } 

    public void setUserType(UserType input) { 
     userPermissions = input; 
    } 
} 
+0

Il motivo per cui questo non funziona è perché 'userPermissions' è dichiarato come tipo' String'. Dovrebbe essere dichiarato come tipo 'UserType', ma per memorizzare l'enum come stringa è necessario richiamare il metodo name() o toString() sull'enumerazione. – scottb

+1

@scottb 'userPermissions' è di tipo' UserType'. In BlueJ dovresti essere in grado di creare un oggetto usando '(" uname ", UserType.ADMIN, "realname") ' – kelunik

+0

Ah, stavo guardando il modello di dati del poster originale, non ho visto che avevi cambiato il tipo di userPermissions in UserType. – scottb

1

perché si è già dichiarato un tipo enum per rappresentare i valori possibili per Karma, hai già percorso un lungo cammino per risolvere questo problema.

Se si dichiara una variabile di tipo UserType, gli unici valori possibili devono essere una delle costanti enum definite.

Per limitare l'input per il metodo di SetPermissions, tutto quello che dovete fare è cambiare la seguente:

public class User{ 

    public String id; 
    public String userPermissions; 
    public String actualName; 

    public User(String username, String userType, String name){ 
     id = username; 
     userPermissions = userType; 
     actualName = name; 
    } 

    public enum UserType{ 
     ADMIN, EDITOR, USER; 
    } 

    public void setUserType(UserType type){ 
     userPermissions = type.toString(); 
    } 
} 
+0

Ho provato questo e ottengo un errore nel mio metodo getUserType che dice "tipi incompatibili" ed evidenziare userPermissions di ritorno ;. Anche questo deve essere cambiato in qualche modo? – user2973447

+0

Come scritto, l'unico modo in cui il metodo 'setUserType (tipoTipo utente)' può fallire è se (1) il campo istanza 'userPermissions' non è dichiarato come String, o (2) se non si passa una costante enum nel proprio chiamata al metodo. Le chiamate dovrebbero avere il seguente aspetto: 'setUserType (UserType.EDITOR);'. – scottb