0

是否可以使用注释使以下代码更简洁,减少重复?我知道使用 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();}

编辑:变量.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);

}

4

2 回答 2

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();
}

注意:不需要所有字段都返回一个字符串。要获取此信息,您可以执行以下操作

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]+", "");

}
于 2013-07-18T18:09:34.747 回答
0

如果没有看到Variable类的代码,很难说有什么可以改进的。我的第一个问题是你为什么要创建匿名内部类只是为了返回getValue方法的值?为什么不向构造函数添加一个值参数并更新方法以返回该值?

于 2013-07-18T18:16:56.740 回答