• ベストアンサー

クラス内のメンバ変数について

クラス内のメンバ変数について Javaで作成したクラスのメンバ変数なのですが、クラス内のメンバ変数名の 一覧を取得する方法を探しています。 昔、仕事でやったような気がするのですが、忘れていました。 やりたいことは、メンバ変数のString型のメンバにtrimを行いたいのですが、 一つずつ名称を指定したくなく、どのクラスでも共通処理を行いたいです。 よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数14

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

http://ideone.com/OLp6X ●一応reflectionなるもので、クラスに関する情報を取得することは可能である。 ●リファレンス読んでもらえればわかるが、上記のコードはPublicなフィールドのみを対象としている。 ●getDeclaredFieldsというメソッドもあるようだが、そのまま書き換えてもセキュリティではねられるようで、ポリシーファイルを書かないとダメらしい。検証するのが面倒だし、以前やったことがあるということはそれなりの経験者だろうから回答はこんなもんでも自力で調べてもらえるだろう。 ●もちろん上記のコードはString型のフィールドをとってきているんじゃくてString型に含まれるフィールドの列挙で、ひとつしかないからひとつしか表示されない。寂しい。

self224
質問者

お礼

ありがとうございます。 すみません。私の勘違いでした。 (デバッカにて)見ている箇所を間違っていました。

self224
質問者

補足

ありがとうございました。 頂いた情報を元に以下の記述でうまくいきました。 public class TestSuper {   private String tA;   public void trim() {     Field fields[] = this.getClass().getDeclaredFields();     try{       for (int i = 0; i < fields.length; i++) {         String type = fields[i].getType().getName();         if("java.lang.String".equals(type)){          fields[i].setAccessible(true);          String obj = (String)fields[i].get(this);          if(obj != null){            fields[i].set(this,obj.trim());          }         }       }      }catch(Exception e){      }   } } public class TestSub extends TestSuper {   private String sA;   private String sB; } ※Getter,Setterは記述している前提。 TestSub sub = new TestSub(); sub.setSA("aaaa "); sub.trim(); System.out.println("[" + sub.getSA() + "]"); ただ、うまく行ったのですが、TestSuperクラスのtAにまで 参照している(fields[]の中にtAも含まれているようです)ようなのですが、 TestSubクラスのみを対象にすることは可能でしょうか?

その他の回答 (1)

回答No.2

> ただ、うまく行ったのですが、TestSuperクラスのtAにまで > 参照している(fields[]の中にtAも含まれているようです)ようなのですが、 > TestSubクラスのみを対象にすることは可能でしょうか? Class#getDeclaredFields() の説明には http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/Class.html#getDeclaredFields%28%29 「これには、public、protected、デフォルト (package) アクセス、および private フィールドは含まれますが、継承フィールドは含まれません。」とあるので、TestSuperクラスのフィールドは返されないはずです。 私も試してみましたが、tAは含まれていませんでした。なので、示されたコードのように Class#getDeclaredFields() を使っているのであれば、何か勘違いをされているのではないかと思います。

self224
質問者

お礼

ありがとうございます。 すみません。私の勘違いでした。 (デバッカにて)見ている箇所を間違っていました。 確認までして頂いてありがとうございました。

関連するQ&A

  • クラスのメンバー変数の書き方。

    クラスのメンバー変数の書き方。 クラスのメンバー変数を書くとき、以下の3つはどちらでも同じ動作をします。 ◆privateの場合、privateを明示的に書く or 書かない ◆null初期化の場合、= nullを明示的に書く or 書かない ◆メンバー変数名に接頭辞(mTextなど)をつける or つけない チームなどで書き方をどちらかに統一するとすれば、どちらに統一するのがいいと思いますか。 理由も含めて教えて下さい。 明示的に書くとJavaに不慣れな人にも分かりやすくて良いと思います。 書かないとタイプ数が減ってコーディングが若干楽です。 接頭辞はthisを書かなくていいのが楽なのですが、なんだか気持ち悪いです。 気持ち悪いのですが、デメリットは明確に説明できません。

    • ベストアンサー
    • Java
  • メンバ変数に関して

    現在、C++にてプログラム作成しております。 1点プログラミングを行っている中で疑問になった点があります。 アイデア・方法等があれば教えて頂けると幸いです。 現在、メンバ変数として配列を定義したプログラムを作成しております。 そのメンバ変数を同クラス内のたくさんのメソッドから呼び出して処理を行っているのですが、そのメンバ変数の配列数を固定配列数ではなく、可変な配列数にしたいと考えております。 プログラムの実行後に取得した値をメンバ変数の配列数にしたいのです。 このように、メンバ変数の配列数の可変可を実施することは可能でしょうか?

  • クラスのメンバになってくれません!

    クラスに変数名・関数名を入れれば自動的にクラスのメンバとしてくれるはずですよね。だけど、クラスメンバにしてくれません。 なぜでしょうか? たすけてください!おねがいします!

  • クラスの継承でメンバ変数が・・

    初めてクラスの継承をしている者です。 親クラスA のメンバ変数らを 親クラスAからの処理で呼び出した 子クラスB で変更したいのですが、 子クラスB内ではちゃんと処理で数値が変化するのですが、 親クラスAに戻ると数値が全て初期値に戻ってしまいます。 継承方法は単に public 親クラスA と記述しているだけで、 親クラスAと子クラスBは別々のファイルに1クラスずつで記述しています。 コンパイルは警告もエラーも出ず動きます。 子クラスから親クラスのメンバ変数を変更するにはどうすれば良いのでしょうか?

  • パッケージ化されたクラスより変数を読む

    パッケージ宣言されたクラスから配列変数を読み出す場合、どのように記述すればいいのでしょうか。 ファイル名 Pack.java パッケージ名 package firstPack; クラス定義 public class Pack {   String [] test = {"あ","い","う","え","お"} } ↑これを、TestPack.java から test の内容を 呼び出す場合。よろしくお願いします。

    • ベストアンサー
    • Java
  • java-別クラスの変数の使い方を教えてください

    javaで、別クラスの変数を使うにはどうしたらできますか?! あるクラスで public String hour =""; のhourという変数を別のクラスで使いたいです。 どなたかよろしくおねがいします><

  • クラスのメンバ変数のnew

    こんにちは。 クラスのメンバ変数の動的割り当てで困っていることがあります。 コンストラクタ内でメンバ変数に動的割り当てをするんですが、そこで例外処理をしなければならないようです。 例 class foo::foo() { try{ hoge = new int[100]; // hogeの代入処理 // } catch { delete[] hoge; hoge = NULL; } } foo::~foo() { delete[] hoge; hoge = NULL; } しかしこれだと不十分なようで、なかしかの対策をしないとメモリリークが起きてしまいそうなんですが どのようにやるんでしょうか?

  • クラス変数とインスタンス変数

    PHP4でクラスを使いはじめたのですが、わからないことが出てきたので、教えてください。 クラスで指定したメンバ変数は、インスタンス毎に記憶さる、インスタンス変数になると思いますが、 クラスそのものに関連付けされた、クラス変数というものは、PHPでは使えないのでしょうか? 以上、よろしくお願いいたします。

    • 締切済み
    • PHP
  • 複数クラスで共通の関数、変数の呼び出し方

    お世話になります。 質問させて頂きたいことは 複数のクラスで共通して使われる関数、変数があった場合、その関数、変数は私の中で次の2通りの方法が思い当たったのですがどちらのほうがメモリ等の使用からよいのでしょうか? 1つめは あるヘッダファイル****.hを作成し、その中で関数を宣言し、変数はそのヘッダファイルのソースファイル中のグローバル変数とする。 2つめは クラスを作成し、静的メンバ関数、静的メンバ変数とする。 ネット等で拝見すると、あまりグローバル変数というのはよく見られていないようなので2つめの方がいいのかなと思っているのですが、静的メンバを今まで使ったことがないので、このような用途に使われるべきなのかも正直わかっていません。 検討外れのことを言っているのかもしれませんが、教えて頂ければと思っております。宜しくお願い致します。

  • Stringクラスの変数の格納アドレスを知りたい

    いつもお世話になります。 Javaの文字列クラスのStringは参照型ですが、この変数の値が格納されたアドレスを知るためにはどうすればよいのでしょうか。eclipse上で、文字列の変数に対してtoString()を試してみたところ、格納されている文字列が出力されました。 ※自作したクラス、たとえばtest.MyClassだとすれば、toString()を用いれば「test.MyClass@01234」というような表記で出力されますが、このような情報を取得するにはどうすればよいでしょうか。 宜しくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう