2013-11-09 18 views
10

所以我試圖做的是這樣的:如何在getter和setter中使用枚舉?

寫User類

一個用戶:

  • 有一個用戶名如 'FJ3'
  • 具有它可以是一個用戶類型: 'user','editor'或'admin'
  • 有一個名字,例如'Francis'
  • 有一個構造函數,它以username,userType和name作爲參數
  • 具有getUsername()方法
  • 具有getUserType()方法
  • 具有getName()方法
  • 具有setUserType()方法,該方法將用戶類型之一作爲參數

到目前爲止我的代碼:

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; 
    } 
} 

什麼我需要做的就是這個工作?我不知道如何製作它,因此可以選擇的唯一的用戶類型是管理員,編輯者或用戶。

+0

驗證數據?使用已知的類型列表? –

+0

_如何在bluej中執行此操作?_您在java中執行此操作,而不是bluej,bluej只是一個IDE – BackSlash

+0

您應該將'userPermissions'重命名爲'userType'。 – kelunik

回答

9

你必須改變你的類型此枚舉:

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

這不起作用的原因是因爲'userPermissions'被聲明爲類型'String'。它確實應該聲明爲'UserType'類型,但爲了將枚舉存儲爲String,需要在枚舉上調用name()或toString()方法。 – scottb

+1

@scottb'userPermissions'類型爲'UserType'。在BlueJ中,你應該可以使用'(「uname」,UserType來創建一個對象。ADMIN,「realname」)' – kelunik

+0

啊,我正在查看原始海報的數據模型,我沒有看到您已將userPermissions的類型更改爲UserType。 – scottb

1

因爲你已經宣佈枚舉類型來表示用戶類型的可能值,你已經走了很長的路來解決這個問題。

如果聲明UserType類型的變量,則唯一可能的值必須是定義的枚舉常量之一。

要限制輸入您setPermissions方法,所有你需要做的是改變了以下內容:

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

我試過這個,我在我的getUserType方法中出現錯誤,說「不兼容的類型」並突出顯示返回userPermissions ;.這是否需要改變? – user2973447

+0

正如所寫的,「setUserType(UserType type)'方法失敗的唯一方法是如果(1)實例字段'userPermissions'沒有被聲明爲一個字符串,或者(2)如果你沒有傳入一個枚舉常量方法調用。調用應該看起來像:'setUserType(UserType.EDITOR);'。 – scottb