【发布时间】:2013-07-24 11:15:32
【问题描述】:
我正在尝试制作一个类似于https://github.com/ElgarL/TownyChat/blob/master/src/com/palmergames/bukkit/TownyChat/TownyChatFormatter.java的系统
replacer.registerFormatReplacement(Pattern.quote("{worldname}"), new TownyChatReplacerCallable() {
@Override
public String call(String match, LocalTownyChatEvent event) throws Exception {
return String.format(ChatSettings.getWorldTag(), event.getEvent().getPlayer().getWorld().getName());
}
});
replacer.registerFormatReplacement(Pattern.quote("{town}"), new TownyChatReplacerCallable() {
@Override
public String call(String match, LocalTownyChatEvent event) throws Exception {
return event.getResident().hasTown() ? event.getResident().getTown().getName() : "";
}
});
还有更多。
有没有办法使用注解来减少重复代码的数量,避免反射调用调用方法,如果有的话,只在注册时使用?
我并不反对创建注释预处理器的想法,因为我已经计划这样做以启用自动生成文档。
【问题讨论】:
-
你可以有一个包含很多方法的类,比如
@PatternHandler("foo") String someMethodName(String match, LocalTownyChatEvent event) {},这些方法是通过该注释注册的,你可以保存replacer.registerFormatReplacement(部分。要么需要反射才能将每个注册为Method,或者您需要将每个注册为Callable -
这是我的想法,但我的问题是“要么需要反射才能将每个注册为方法,或者你需要将每个都设为可调用”我不知道如何开始那部分。我还计划在某个阶段使用 Annotation 处理器来生成文档,所以这是主要原因。
标签: java annotations apt