Wie verwende ich Enums in Getter und setter?
Also, was ich versuche zu tun, ist dies:
Schreiben Sie eine Klasse Benutzer
Benutzer:
- hat ein Benutzername e.g 'fj3'
- hat einen userType werden kann: 'user', 'editor' oder 'Administrator'
- hat einen Namen e.g 'Francis'
- hat einen Konstruktor, welcher der username userType und name als Parameter
- hat eine getUsername () - Methode
- hat eine getUserType () - Methode
- hat eine getName () - Methode
- hat eine setUserType () - Methode, die einen der Benutzer-Typen als parameter
Mein code bisher:
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;
}
}
Was muss ich tun, um diese zu arbeiten? Ich weiß nicht, wie man es so machen das nur usertypes, die gewählt werden können sind admin, Redakteur oder Benutzer.
Validierung der Daten? Verwenden Sie eine Liste bekannter Typen?
Wie soll ich das in bluej? Sie tun es in java nicht bluej, bluej ist nur eine IDE
Sollten Sie
Wenn Sie die Einstellung
Mit einem enum ist die absolut richtige Sache zu tun, um den Nutzer einzuschränken Typ nur eine von einer Reihe von Konstanten, die alle zur Kompilierzeit bekannt ist. Jedoch, der Java-Konvention für die Benennung sowohl static final Felder und enum-Konstanten zu verwenden ALL_UPPER_CASE mit Worten, getrennt durch einen Unterstrich. Da enum-Konstanten sind sonst nicht zu unterscheiden von anderen Identifikatoren, es ist sehr wichtig, Folgen dieser Konvention.
Wie soll ich das in bluej? Sie tun es in java nicht bluej, bluej ist nur eine IDE
Sollten Sie
userPermissions
zu userType
.Wenn Sie die Einstellung
id = username
werden, ändern Sie entweder den Namen des Feldes in der Klasse username
oder pass in id
. Und id und ein Benutzername sind verschiedene Dinge, und der code gibt vor, Sie sind die gleiche Sache im moment. Mit einer Klasse erzeugte id könnte noch besser sein, so dass Sie können einen Benutzer erstellen und dann für die id, nachdem es erstellt wurde. Das gleiche problem besteht für userPermissions/userType und actualName/name. public User(String id, String userType, string userName) { this.id = id; this.userType = userType; this.userName = userName; }
. Jetzt haben wir vernünftige code.Mit einem enum ist die absolut richtige Sache zu tun, um den Nutzer einzuschränken Typ nur eine von einer Reihe von Konstanten, die alle zur Kompilierzeit bekannt ist. Jedoch, der Java-Konvention für die Benennung sowohl static final Felder und enum-Konstanten zu verwenden ALL_UPPER_CASE mit Worten, getrennt durch einen Unterstrich. Da enum-Konstanten sind sonst nicht zu unterscheiden von anderen Identifikatoren, es ist sehr wichtig, Folgen dieser Konvention.
InformationsquelleAutor user2973447 | 2013-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie ändern Ihre Arten dieser enum:
userPermissions
ist deklariert als TypString
. Es sollte wirklich erklärt werden als TypUserType
, aber um zu speichern, die enum als String, den Sie zum aufrufen der Namen() oder toString () - Methode der enum.der Typ ist
UserType
. In BlueJ Sie sollten in der Lage sein erstellen Sie ein Objekt mit("uname", UserType.ADMIN, "realname")
Ah, ich war auf der Suche auf den original-poster Datenmodell habe ich nicht sehen, Sie hatte sich geändert, die Art der userPermissions zu UserType.
Danke =) das erklärt. Jetzt ist es kompiliert, aber wenn ich versuche, ein Objekt zu erstellen, mithilfe dieser Klasse, ich versage, ich bin nicht sicher, ob es meine Eingabe der Daten falsch oder was. Der name und Benutzername sind in Ordnung denke ich, aber wenn ich versuche, inout usertype bekomme ich die Meldung inkompatible Typen, wenn ich versuche, "admin" oder error: cannot find symbol - variable admin wenn ich versuche admin
Oh, ich habe gerade getestet, die Sie haben zu verwenden
User.UserType.ADMIN
InformationsquelleAutor kelunik
Weil Sie schon erklärt haben, einen enum-Typ repräsentieren die möglichen Werte für userType, haben Sie bereits einen langen Weg gegangen, um dieses problem zu lösen.
Wenn Sie eine variable deklarieren vom Typ UserType, dann ist das nur möglich, müssen die Werte der definierten enum-Konstanten.
Beschränken Sie die Eingabe auf Ihrem setPermissions-Methode, alle Sie tun müssen ist, wechseln Sie zum folgenden:
Wie geschrieben, der einzige Weg, die Methode
setUserType(UserType type)
können Versagen, wenn (1) das Instanz-FelduserPermissions
ist nicht deklariert als String, oder (2) wenn Sie nicht vorbei an einer enum-Konstanten in Ihre Methode nennen. Anrufe Aussehen sollte:setUserType(UserType.EDITOR);
.InformationsquelleAutor scottb