【问题标题】:How to call method without parameter in java reflection如何在java反射中调用没有参数的方法
【发布时间】:2018-07-17 11:08:05
【问题描述】:

我用java反射写了下面的代码。在这段代码中,我调用了 method1() ,它有一个参数并且代码运行没有错误。没关系。但是如何调用没有参数的 method2() 和 method3() 呢?如何在java反射中调用没有参数的方法? Java 是否支持这样的功能?

import java.lang.reflect.Method;

class MethodCallTest {
  public static void main(String[] args) {
    MethodCallTest mct = new MethodCallTest();
    mct.start();
  }

  private void start(){
    try{
        Class<?> c = getClass();
          Method m1 = c.getDeclaredMethod("method1", String.class);
          m1.invoke(this, "method1");
    }catch(Exception e){
      e.printStackTrace();
    }
  }

  private void method1(String s){
    System.out.println("Hello from " + s);
  }

  private static void method2(){
    System.out.println("Hello from method2");
  }

  private static void method3(){
    System.out.println("Hello from method3");
  }

}

【问题讨论】:

  • 第二个变量是vargs

标签: java methods reflection


【解决方案1】:

如何在java反射中调用没有参数的方法?

如果它不期望一个参数,就不要给它一个参数。

Java 是否支持这样的功能?

是的。

Method m2 = c.getDeclaredMethod("method2");
m2.invoke(this);

c.getDeclaredMethod("method2").invoke(this);

顺便说一句,从技术上讲,this 是第一个隐式参数。如果您没有参数,则该方法必须是 static,它是这样调用的。

static void staticMethod() { }

使用调用

c.getDeclaredMethod("staticMethod").invoke(null);

【讨论】:

  • 好的,它工作正常。我不知道可以忽略的 vargs。我会在 6 分钟后接受这个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
相关资源
最近更新 更多