在制作arraylist时如何引用在另一个类中创建的对象?

时间:2013-11-09 21:58:14

标签: java arraylist

我有两个类,我在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时,它说&#34;找不到符号类UserType&#34;。我正在尝试在User类中创建的UserGroup中创建一个arraylist。我哪里错了?

2 个答案:

答案 0 :(得分: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;

你可以将它放在自己的类中,但在我看来,使用它是一个内在的用户是有意义的,因为它天生就是用户的属性。

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

答案 1 :(得分:0)

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

或者,您可以像上面提到的那样使用导入:

import packagename.User.UserType;