我正在为一个更大的项目编写一个系统,该系统的不同类在一个CommandHandler中注册那里的命令。命令是带有要执行的代码的类。
我的问题:CommandHandler需要有关类,名称,权限和用法的一些信息。
我已经尝试过@interfaces,但这总是让我为null。我应该以其他方式执行此操作还是可以解决此问题?
代码:CommandHandler中的寄存器
public void register(Class<? extends Command> c) {
CommandInfo info = c.getAnnotation(CommandInfo.class);
if (info == null) return;
try {
commands.put(info.pattern(), c.newInstance());
}
catch (Exception e) {
e.printStackTrace();
}
}
@CommandInfo
@Retention(RetentionPolicy.RUNTIME)
public @interface CommandInfo
{
/**
* The actual name of the command. Not really used anywhere.
*/
public String name();
/**
* A regex pattern that allows minor oddities and alternatives to the
* command name.
*/
public String pattern();
/**
* The usage message, i.e. how the command should be used.
*/
public String usage();
/**
* A description of what the command does.
*/
public String desc();
/**
* The permission required to execute this command.
*/
public String permission();
}
还有一个命令:
public class SetPortPoint implements Command
{
@CommandInfo(
name = "setportpoint",
pattern = "setportpoint|spp",
usage = "/maa setportpoint <arena> <wavenumber>",
desc = "set a Port point for a Arena at a given Wave",
permission = "mobarenaaddon.porter.setportpoint"
)
public boolean execute(){
//The Code to do
}
}
最佳答案
您正在请求在类上的注释,但是您所请求的内容放在一个方法上。可以在类本身上添加注释,也可以枚举其方法(getMethods()
),然后分别对每个注释进行查询。当然,您要做什么取决于您想要什么。
另请注意,注释不会继承到子类。
关于java - 一类信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14302403/