Java – SubType Enums或SubClass

我试图让一个enum对应一个类或返回该类,但我得解决。 如果我使用CommandType.SELLSHARES返回SellShares.class这种行为是否SellShares.class ? 或者,我可以组织具有从父类型inheritance的不同类别的枚举吗?

命令 – ADMINUSERCLIENT

 public enum CommandType { // SELLSHARES, BUYSHARES, UPDATEUSER, ADDUSER, ADMINASSIGNMENT, BANUSER, CHANGESTATUS, REMOVEUSER SELLSHARES (SellShares.class), BUYSHARES (BuyShares.class); private Class command; CommandType(Class command) { this.command = command; } private Class command() { return command; } public static <T extends Enum> T getInstance(final String value, final Class enumClass) { return Enum.valueOf(enumClass, value); } } 

要么

 public enum CommandType { AdminCommands, UserCommands } enum AdminCommands { UPDATEUSER, ADDUSER, ADMINASSIGNMENT, BANUSER, CHANGESTATUS, REMOVEUSER } enum User { SELLSHARES, BUYSHARES } 

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 getByType(Type type) { List commands = new ArrayList(); for (Commands command : values()) { if (command.type.equals(type)) { commands.add(command); } } return commands; } private final Type type; private final Class command; private Commands(Type type, Class command) { this.type = type; this.command = command; } public Class getCommand() { return command; } public Command newInstance() throws Exception { return command.newInstance(); } } 

要创建实例,只需使用:

 Commands.UPDATE_USER.newInstance(); 

获取给定类型的所有命令:

 Commands.getByType(Commands.Type.ADMIN); 

请注意,使用此方法, Commands子类必须实现公共的Nullary构造函数。