12

Javaで何らかのリフレクションを実現しようとしています。私は持っている:

class P {
  double t(double x) {
    return x*x;
  }

  double f(String name, double x) {
    Method method;
    Class<?> enclosingClass = getClass().getEnclosingClass();
     if (enclosingClass != null) {
        method = enclosingClass.getDeclaredMethod(name, x);
        try {
          method.invoke(this, x);
        } catch (Exception e) {
          e.printStackTrace();
        }

    }
}

class o extends P {
  double c() { 
    return f("t", 5);
  }
}

new o().c() から値を取得するにはどうすればよいですか?

4

2 に答える 2

21

参照用にダミー クラスを配置すると、それに応じてコードを変更できます。

import java.lang.reflect.Method;

public class Dummy {

    public static void main(String[] args) throws Exception {
        System.out.println(new Dummy().f("t", 5));
    }

    double t(Double x) {
        return x * x;
    }

    double f(String name, double x) throws Exception {
        double d = -1;
        Method method;
        Class<?> enclosingClass = getClass();
        if (enclosingClass != null) {
            method = enclosingClass.getDeclaredMethod(name, Double.class);
            try {
                Object value = method.invoke(this, x);
                d = (Double) value;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return d;
    }
}

このクラスを実行するだけです。

于 2013-03-29T04:17:24.770 に答える
5

invoke()メソッドは、そのメソッドの実行後に返されるオブジェクトを返します! あなたが試すことができるように...

Double dd = (Double)method.invoke(this,x);
double retunedVal = dd.doubleValue();
于 2013-03-29T04:17:33.417 に答える