2013-11-09 21 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