打印参数传递给方法Generic Way

时间:2014-05-05 13:51:03

标签: java

是否可以编写方法或方法来打印任何方法的参数? 我的意思是假设我有两种方法,比如

calculate(int a,int b) {}

notifyResult(int type){}

所以我想要一个在计算方法调用时打印"a""b"的方法 调用notifyResult print "type".

时会发生同样的事情

我知道使用反射或AOP技术可以帮助我吗? 还有其他办法吗?

3 个答案:

答案 0 :(得分:3)

从Java 8开始,您可以obtain the name of method argument

为此,您必须使用选项-parameters编译代码。

然后形成[Executable]类(Method或Constructor)的实例,您可以使用方法getParameters()来获取Parameter个实例的数组。 getName()方法将解析名称。

private void example(Class<?> type) {

 for(Method method : type.getMethods()){
   for(Parameter parameter : getParameters()) {
       System.out.println("%s",parameger.getName());
   }
  }
}

答案 1 :(得分:1)

没有直接的方法可以做到这一点。我的意思是,没有可以检索参数的java API。

但是,您可以使用以下方法。

  1. 在每个方法的开头添加日志消息。手动打印所有参数。
  2. 使用字节码工程
  3. 使用(动态)代理
  4. 字节码工程库的示例包括ASMCGLIBJavassist。更高级别的AOP库示例为AspectJ

答案 2 :(得分:0)

您可以在 Java 8

中执行此操作
Class<String> someClass = String.class;
for (Method someMethod : someClass.getDeclaredMethods()) {
   for (Parameter p : someMethod.getParameters()) {
      System.err.println("  " + p.getName());
   }
}

并且看到here