是否可以使用注释减少重复次数以使代码更清晰? 我知道有可能使用java 8闭包,但尝试将其用于java 6/7
Variable x = new Variable(this,"HClass","HC"){
@Override
String getValue(Player p){
return getHeroFromPlayer(p).getHeroClass().getName();
}
};
Variable y = new Variable(this,"HSecClass","HSC"){
@Override
String getValue(Player p){
return getHeroFromPlayer(p).getSecondClass().getName();
}
};
Variable z = new Variable(this,"HLevel","HL"){
@Override
String getValue(Player p){
return getHeroFromPlayer(p).getLevel();
}
};
Variable a = new Variable(this,"HMastered","HMa"){
@Override
String getValue(Player p){
return getHeroFromPlayer(p).isMaster(getHeroFromPlayer(p).getHeroClass()) && (heroSClass == null || getHeroFromPlayer(p).isMaster(heroSClass))
? LocaleType.MESSAGE_HEROES_TRUE.getVal() : LocaleType.MESSAGE_HEROES_FALSE.getVal();;
}
};
这种情况持续了一段时间,它们都被添加到地图中,这会懒洋洋地返回结果。
编辑:我希望注释可以让我按照
的方式做点什么@Variable("HLevel","HL")
String getHLevel(){getHeroFromPlayer(p).getlevel();}
编辑: Variable.java
abstract class Variable {
final private VariableGroup vg;
final private List<String> keys = new Vector<String>();
Variable(VariableGroup vg,String...varargs){
this.vg = vg;
for (String s:varargs){
keys.add(s);
}
}
abstract String getValue(Player p);
}
答案 0 :(得分:1)
根据您的评论,您可以执行类似的操作
@Variable("Primary Class")
public String getHClass(Player p) {
return getHeroFromPlayer(p).getHeroClass().getName();
}
@Variable("Primary Class Level")
public int getHLevel(Player p) {
return getHeroFromPlayer(p).getHLevel();
}
@Variable("Secondary Class")
public String getHSecClass(Player p) {
return getHeroFromPlayer(p).getSecondClass().getName();
}
@Variable("Secondary Class Level")
public int getHLevel(Player p) {
return getHeroFromPlayer(p).getHSecLevel();
}
注意:不需要所有字段都返回String。要获取此信息,您可以执行以下操作
Class heroClass =
for(Method method : heroClass.getMethods()) {
Variable var = method.getAnnotation(Variable.class);
if (var == null) continue; // ignore Object.getClass()
String description = var.value; // text to display to users
String attributeName = method.getName().substring(3); // cut "get"
String initials = attributeName.replaceAll("[a-z]+", "");
}
答案 1 :(得分:0)
如果没有看到变量类的代码,很难说可以改进什么。我的第一个问题是,为什么要创建匿名内部类只是为了返回 getValue 方法的值?为什么不直接向构造函数添加一个值参数并更新方法以返回该值?