Java-子类型枚举或子类

Java-子类型枚举或子类,java,enums,Java,Enums,我试图让一个enum对应于一个类或返回该类,但我需要解决这个问题。如果我使用CommandType.SELLSHARES返回SELLSHARES.class,是否可能出现这种行为?或者我可以使用从父类型继承的不同类别来组织枚举吗 命令-管理员,用户,客户端 public enum CommandType { // SELLSHARES, BUYSHARES, UPDATEUSER, ADDUSER, ADMINASSIGNMENT, BANUSER, CHANGESTATUS, REMOVEU

我试图让一个
enum
对应于一个类或返回该类,但我需要解决这个问题。如果我使用
CommandType.SELLSHARES
返回
SELLSHARES.class
,是否可能出现这种行为?或者我可以使用从父类型继承的不同类别来组织枚举吗

命令-
管理员
用户
客户端

public enum CommandType {

// SELLSHARES, BUYSHARES, UPDATEUSER, ADDUSER, ADMINASSIGNMENT, BANUSER, CHANGESTATUS, REMOVEUSER

    SELLSHARES (SellShares.class),
    BUYSHARES (BuyShares.class);

    private Class<Command> command;

    CommandType(Class<Command> command) {
        this.command = command;
    }

    private Class<Command> command() { return command; }

    public static <T extends Enum<T>> T getInstance(final String value,
            final Class<T> enumClass) {
        return Enum.valueOf(enumClass, value);
    }

}
getByType问题

void initialCommands() throws Exception
    {
        listCommands = Commands.getByType(Commands.Type.ADMIN);

        for (Commands command : listCommands)
            {
                Command commandss = command.newInstance();
                //addCommand(command.getCommand());
                //log.trace(command.newInstance());

            }

    }

你一定在找这样的东西:

public enum Commands {

    UPDATE_USER(Type.ADMIN, UpdateUser.class),
    ADD_USER(Type.ADMIN, AddUser.class),
    ADMIN_ASSIGNMENT(Type.ADMIN, AdminAssignment.class),
    BAN_USER(Type.ADMIN, BanUser.class),
    CHANGE_STATUS(Type.ADMIN, ChangeStatus.class),
    REMOVE_USER(Type.ADMIN, RemoveUser.class),

    SELL_SHARES(Type.USER, SellShares.class),
    BUY_SHARES(Type.USER, BuyShares.class);

    public enum Type {
        ADMIN,
        USER;
    }

    public static List<Commands> getByType(Type type) {
        List<Commands> commands = new ArrayList<Commands>();
        for (Commands command : values()) {
            if (command.type.equals(type)) {
                commands.add(command);
            }
        }
        return commands;
    }

    private final Type type;

    private final Class<? extends Command> command;

    private Commands(Type type, Class<? extends Command> command) {
        this.type = type;
        this.command = command;
    }

    public Class<? extends Command> getCommand() {
        return command;
    }

    public Command newInstance() throws Exception {
        return command.newInstance();
    }

}
要获取给定类型的所有命令,请执行以下操作:

Commands.getByType(Commands.Type.ADMIN);

请注意,使用此方法,
命令
子类必须实现一个公共空构造函数。

新实例工作得非常好。非常感谢。几乎正是我要找的。我的问题的另一部分是分离不同类型的命令。我想我只需要将这些类型组合在一起就可以创建三个类。所以AdminCommandType,UserCommandType,ClientCommandType。有什么建议吗?非常令人印象深刻。谢谢。@user3590149很高兴我能帮忙;)在获取getByType命令列表后,提取新实例时遇到问题。我把我正在使用的代码放在其他代码的上面。
Commands.UPDATE_USER.newInstance();
Commands.getByType(Commands.Type.ADMIN);