- PR -

変数名そのものをString型の中に入れたい

1
投稿者投稿内容
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2007-01-04 21:26
いつも勉強させていただいてます。


String shimei = "田中";

基本データ型やString型の中身("田中")ではなく変数名そのもの("shimei")を文字列にしたいのですが、
そういったことはできますでしょうか。

  System.out.println("変数shimeiには" + shimei + "が入っています");

としているところを、

  System.out.println("変数" + class.変数名をString型にして返すメソッド(引数) +
   "には" + shimei + "が入っています");

という風にしたいです。


環境はStruts1.2.9 / Tomcat5.0 / Eclipse3.2を使っています。
よろしくお願いします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-01-04 22:01
変数がフィールドを示すのかローカル変数を示すのかで変わります。

フィールドであれば、
コード:
public class Hoge{
    public String shimei = "田中";

    public void test(){
        Field field = getClass().getField("shimei");
        System.out.println("name=" + field.getName() + ";value=" + field.get(this));
    }
}


という感じで取得できます。
(Fieldはjava.lang.reflect.Field、例外処理は省略・・・)

ローカル変数の場合は無理です。
ローカル変数名はバイトコードの中にデバッグ情報として残されてはいますが、
ランタイム時には情報を取得することはできません。
実行されるバイトコードにはローカル変数名の概念がないためです。
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2007-01-07 19:24
返信ありがとうございます。

ローカル変数として使いたかったのですが、無理なんですね…。
ローカル変数とクラス変数の細かな違いをあまり意識していなかったので、
勉強になりました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)