Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@nesheep5

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

More than 3 years have passed since last update.

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

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
nesheep5
サーバサイドエンジニアをやっています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?