0

我有 2 个我在 blueJ 中制作的课程——一个叫做 User,另一个叫做 UserGroup。我的用户类如下所示:

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

到目前为止,我的 UserGroup 类是这样的:

import java.util.*;

public class UserGroup{

    private static ArrayList<User> UserGroup= new ArrayList<User>();

    public static void add(String username, UserType userType, String name){
        UserGroup.add(new User(username, userType,name));
    }


}

我的问题是当我尝试编译 UserGroup 时,它说“找不到符号类 UserType”。我正在尝试在 User 类中创建的 UserGroup 中创建一个数组列表。我哪里错了?

4

2 回答 2

1

UserType 是 User 的内部类:

public class User {

    // inner

    public enum UserType {
        ADMIN, EDITOR, USER;
    }

如果你想在 UserGroup 中使用它,你可以做两件事。首先您可以导入它,然后您可以从 UserGroup 访问它:

import mypackage.User.UserType;

public class UserGroup {

或者不导入它,您可以从 UserGroup 中使用一个点访问它:

User.UserType type = User.UserType.ADMIN;

你可以把它放在它自己的类中,但在我看来,让它成为 User 的内部是有道理的,因为它天生就是 User 的一个属性。

还有一点需要注意的是,通常内部类的规则与常规类有点不同。通常内部类是实例成员,即内部类由外部类的实例拥有,而不是外部类本身。要访问内部类,Outer.Inner您必须将内部类声明为static. 默认情况下,枚举是静态的,因此您不必这样声明它们。

于 2013-11-09T22:03:15.247 回答
0

枚举UserType必须是一个单独的类;目前它是一个内部类,User只有类可以访问,类不能访问UserGroup。这可以通过使用 IDE 创建一个新的枚举来实现,UserType同时删除已在 .h 中使用的内部类枚举User

或者,您可以使用他已经提到的导入:

import packagename.User.UserType;
于 2013-11-09T22:00:27.813 回答