除了我自己没有能力更有效地执行此代码之外,我无法将代码加倍...
for (Method curr: all){
if (curr.isAnnotationPresent(anno)){
if (anno == Pre.class){
for (String str : curr.getAnnotation(Pre.class).value()){
if (str.equals(method.getName()) && curr.getReturnType() == boolean.class && curr.getParameterTypes().length == 0){
toRun.add(curr);
}
}
} if (anno == Post.class) {
for (String str : curr.getAnnotation(Post.class).value()){
if (str.equals(method.getName()) && curr.getReturnType() == boolean.class && curr.getParameterTypes().length == 0){
toRun.add(curr);
}
}
}
}
}
anno是一个参数 - Class<? extends Annotation>
,Pre
和Post
是我的注释,两者都有value()
,这是一个字符串数组。
当然,这都是因为我让Eclipse自动填充了我还不了解的代码。
答案 0 :(得分:2)
如果“更有效”意味着'用更少的代码行',那么为什么不合并两个if语句?我可以在它们之间看到的唯一区别是一个有Pre.class
,另一个有Post.class
,你已经在anno var中方便地获得了这个类引用:
for (Method curr : all) {
if (curr.isAnnotationPresent(anno)) {
if (anno == Pre.class || anno == Post.class){
for (String str : curr.getAnnotation(anno).value()){
if (str.equals(method.getName()) && curr.getReturnType() == boolean.class && curr.getParameterTypes().length == 0){
toRun.add(curr);
}
}
}
}
}
除此之外,如果anno
既不是Pre.class
也不是Post.class
,那么执行外部for循环是没有意义的,所以你应该在外面进行检查(这可以节省对方法的迭代)如果用一个你不想要的注释调用它。您还可以在内部for循环之外移动对returnType和参数长度的检查(这样可以为每个值保存重复它们,如果它们不为真,则保存迭代)。
if (anno == Pre.class || anno == Post.class){
for (Method curr : all) {
if (curr.isAnnotationPresent(anno) && curr.getReturnType() == boolean.class && curr.getParameterTypes().length == 0) {
for (String str : curr.getAnnotation(anno).value()){
if (str.equals(method.getName())) {
toRun.add(curr);
}
}
}
}
}