Java – SubType Enums或SubClass
我试图让一个enum
对应一个类或返回该类,但我得解决。 如果我使用CommandType.SELLSHARES
返回SellShares.class
这种行为是否SellShares.class
? 或者,我可以组织具有从父类型inheritance的不同类别的枚举吗?
命令 – ADMIN
, USER
, CLIENT
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 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.UPDATE_USER.newInstance();
获取给定类型的所有命令:
Commands.getByType(Commands.Type.ADMIN);
请注意,使用此方法, Commands
子类必须实现公共的Nullary构造函数。