LoginSignup
5
4

More than 5 years have passed since last update.

リフレクションで引数名を取得するときはjavacに-parametersオプションをつける

Last updated at Posted at 2017-02-02

Javaでリフレクションを利用してメソッドの引数名を取得したかったのですが、ちょっと詰まったのでメモ。

結論としてはコンパイル時、javacに-parametersオプションをつける必要がありました。
以下検証までの手順です。

問題:リフレクションで取得した引数名がargNになる

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

public class GetArgsName {
    public static void main(String... args) throws NoSuchMethodException, SecurityException {

        Method m = Calc.class.getDeclaredMethod("add", int.class, int.class);
        Arrays.stream(m.getParameters())
            .map(Parameter::getName).forEach(System.out::println);
    }

    public static class Calc {
        public int add(int x, int y) {
            return x + y;
        }
    }
}

上記のプログラムで引数名を取得できると思い、実行してみたところ以下のような結果が。

arg0
arg1

引数名であるx,yを取得したかったのですが、なぜかargNで取得されました。

解決法:javacに-parametersオプションをつける

いろいろ調べた結果、以下のサイトにドンピシャの答えが書いてありました。
ひしだまさんにはいつもお世話になっています。笑

リフレクションで引数名を取得したい場合、javacに-parametersオプションをつける必要があるとのこと。
またEclipseで実行するときは、プロジェクトのProperties > Java Compiler より以下にチェックを入れればOK。

Properties_for_amateras_allocate_claim_debt_fw.png

再度実行した結果、以下のように思惑どおり引数名を取得できました。

x
y

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4