我正在编写小而非常DRY的框架,它严重依赖于元数据.我想知道是否有办法获取方法参数名称,即给定一些方法
public void a(int myIntParam, String theString) { ... }
Run Code Online (Sandbox Code Playgroud)
得到字符串"myIntParam"和"theString".
我知道我可以注释参数,但这不会很好......
public void a(
@Param("myIntParam") int myIntParam,
@Param("theString") String theString
) { ... }
Run Code Online (Sandbox Code Playgroud)
Jon*_*eim 15
这是一个需要一些调整的脏解决方案.也许有人可以做得更好.
import com.sun.org.apache.bcel.internal.classfile.ClassParser;
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
import com.sun.org.apache.bcel.internal.classfile.LocalVariable;
import com.sun.org.apache.bcel.internal.classfile.Method;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
ClassParser parser = new ClassParser("Main.class");
JavaClass clazz = parser.parse();
for (Method m : clazz.getMethods()) {
System.out.println("Method: " + m.getName());
int size = m.getArgumentTypes().length;
if (!m.isStatic()) {
size++;
}
for (int i = 0; i < size; i++) {
LocalVariable variable = m.getLocalVariableTable().getLocalVariable(i);
System.out.println(" - Param: " + variable.getName());
}
}
}
public void a(int myIntParam, String theString) {
}
}
Run Code Online (Sandbox Code Playgroud)
$ javac -g Main.java
$ java Main
Method: <init>
- Param: this
Method: main
- Param: args
Method: a
- Param: this
- Param: myIntParam
- Param: theString
小智 4
我们为保存参数名称 String[] 的方法创建了一个自定义注释。这种方法感觉比必须注释每个单独的参数更容易管理。我们计划添加构建时检查,以确保带注释的参数名称的数量与参数的数量相匹配,因为这是我们所需要的。