0

blueJ で作成している 2 つのクラスがあります。1 つは User と呼ばれ、もう 1 つは 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 をコンパイルしようとすると、「symbol-class UserType が見つかりません」と表示されることです。User クラスで作成されたユーザーの UserGroup に arraylist を作成しようとしています。どこが間違っていますか?

4

2 に答える 2

1

UserType は User の内部クラスです。

public class User {

    // inner

    public enum UserType {
        ADMIN, EDITOR, USER;
    }

UserGroup で使用したい場合、できることは 2 つあります。最初にインポートしてから、UserGroup からアクセスできます。

import mypackage.User.UserType;

public class UserGroup {

または、インポートせずに、ドットを使用して UserGroup からアクセスできます。

User.UserType type = User.UserType.ADMIN;

それを独自のクラスに入れることもできますが、私の意見では、それは本質的に User の属性であるため、User の内部にすることは理にかなっています。

また、注意すべきことの 1 つは、通常、内部クラスのルールが通常のクラスとは少し異なることです。通常、内部クラスはインスタンス メンバーです。つまり、内部クラスは、外部クラス自体ではなく、外部クラスのインスタンスによって所有されます。内部クラスにアクセスするOuter.Innerには、内部クラスを として宣言する必要がありますstatic。列挙型はデフォルトで静的であるため、そのように宣言する必要はありません。

于 2013-11-09T22:03:15.247 に答える
0

列挙UserType型は別のクラスである必要があります。現時点では、Userクラスのみがアクセスできる内部クラスであり、クラスからはアクセスできませんUserGroupUserTypeこれは、IDE を使用して、内で使用されている内部クラスの列挙型を削除しながら、呼び出される新しい列挙型を作成することで実現できますUser

または、前述のようにインポートを使用することもできます。

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