我试图让一个枚举对应于一个类或返回该类,但我得到解决.如果我使用CommandType.SELLSHARES来返回SellShares.class,是否可能出现这种情况?还是可以组织具有从父类型继承的不同类别的枚举?
命令-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 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子类必须实现公共的null构造函数.
标签:java,enums
来源: https://codeday.me/bug/20191011/1890784.html