我有两个类,我在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。我哪里错了?
答案 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;