- ベストアンサー
クラス内のメンバ変数について
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
http://ideone.com/OLp6X ●一応reflectionなるもので、クラスに関する情報を取得することは可能である。 ●リファレンス読んでもらえればわかるが、上記のコードはPublicなフィールドのみを対象としている。 ●getDeclaredFieldsというメソッドもあるようだが、そのまま書き換えてもセキュリティではねられるようで、ポリシーファイルを書かないとダメらしい。検証するのが面倒だし、以前やったことがあるということはそれなりの経験者だろうから回答はこんなもんでも自力で調べてもらえるだろう。 ●もちろん上記のコードはString型のフィールドをとってきているんじゃくてString型に含まれるフィールドの列挙で、ひとつしかないからひとつしか表示されない。寂しい。
その他の回答 (1)
- kenichiice
- ベストアンサー率72% (27/37)
> ただ、うまく行ったのですが、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() を使っているのであれば、何か勘違いをされているのではないかと思います。
お礼
ありがとうございます。 すみません。私の勘違いでした。 (デバッカにて)見ている箇所を間違っていました。 確認までして頂いてありがとうございました。
関連するQ&A
- クラスのメンバー変数の書き方。
クラスのメンバー変数の書き方。 クラスのメンバー変数を書くとき、以下の3つはどちらでも同じ動作をします。 ◆privateの場合、privateを明示的に書く or 書かない ◆null初期化の場合、= nullを明示的に書く or 書かない ◆メンバー変数名に接頭辞(mTextなど)をつける or つけない チームなどで書き方をどちらかに統一するとすれば、どちらに統一するのがいいと思いますか。 理由も含めて教えて下さい。 明示的に書くとJavaに不慣れな人にも分かりやすくて良いと思います。 書かないとタイプ数が減ってコーディングが若干楽です。 接頭辞はthisを書かなくていいのが楽なのですが、なんだか気持ち悪いです。 気持ち悪いのですが、デメリットは明確に説明できません。
- ベストアンサー
- Java
- クラスのメンバになってくれません!
クラスに変数名・関数名を入れれば自動的にクラスのメンバとしてくれるはずですよね。だけど、クラスメンバにしてくれません。 なぜでしょうか? たすけてください!おねがいします!
- 締切済み
- C・C++・C#
- クラスの継承でメンバ変数が・・
初めてクラスの継承をしている者です。 親クラスA のメンバ変数らを 親クラスAからの処理で呼び出した 子クラスB で変更したいのですが、 子クラスB内ではちゃんと処理で数値が変化するのですが、 親クラスAに戻ると数値が全て初期値に戻ってしまいます。 継承方法は単に public 親クラスA と記述しているだけで、 親クラスAと子クラスBは別々のファイルに1クラスずつで記述しています。 コンパイルは警告もエラーも出ず動きます。 子クラスから親クラスのメンバ変数を変更するにはどうすれば良いのでしょうか?
- ベストアンサー
- C・C++・C#
- パッケージ化されたクラスより変数を読む
パッケージ宣言されたクラスから配列変数を読み出す場合、どのように記述すればいいのでしょうか。 ファイル名 Pack.java パッケージ名 package firstPack; クラス定義 public class Pack { String [] test = {"あ","い","う","え","お"} } ↑これを、TestPack.java から test の内容を 呼び出す場合。よろしくお願いします。
- ベストアンサー
- Java
- java-別クラスの変数の使い方を教えてください
javaで、別クラスの変数を使うにはどうしたらできますか?! あるクラスで public String hour =""; のhourという変数を別のクラスで使いたいです。 どなたかよろしくおねがいします><
- 締切済み
- Java
- クラスのメンバ変数のnew
こんにちは。 クラスのメンバ変数の動的割り当てで困っていることがあります。 コンストラクタ内でメンバ変数に動的割り当てをするんですが、そこで例外処理をしなければならないようです。 例 class foo::foo() { try{ hoge = new int[100]; // hogeの代入処理 // } catch { delete[] hoge; hoge = NULL; } } foo::~foo() { delete[] hoge; hoge = NULL; } しかしこれだと不十分なようで、なかしかの対策をしないとメモリリークが起きてしまいそうなんですが どのようにやるんでしょうか?
- ベストアンサー
- C・C++・C#
- クラス変数とインスタンス変数
PHP4でクラスを使いはじめたのですが、わからないことが出てきたので、教えてください。 クラスで指定したメンバ変数は、インスタンス毎に記憶さる、インスタンス変数になると思いますが、 クラスそのものに関連付けされた、クラス変数というものは、PHPでは使えないのでしょうか? 以上、よろしくお願いいたします。
- 締切済み
- PHP
- 複数クラスで共通の関数、変数の呼び出し方
お世話になります。 質問させて頂きたいことは 複数のクラスで共通して使われる関数、変数があった場合、その関数、変数は私の中で次の2通りの方法が思い当たったのですがどちらのほうがメモリ等の使用からよいのでしょうか? 1つめは あるヘッダファイル****.hを作成し、その中で関数を宣言し、変数はそのヘッダファイルのソースファイル中のグローバル変数とする。 2つめは クラスを作成し、静的メンバ関数、静的メンバ変数とする。 ネット等で拝見すると、あまりグローバル変数というのはよく見られていないようなので2つめの方がいいのかなと思っているのですが、静的メンバを今まで使ったことがないので、このような用途に使われるべきなのかも正直わかっていません。 検討外れのことを言っているのかもしれませんが、教えて頂ければと思っております。宜しくお願い致します。
- 締切済み
- C・C++・C#
- Stringクラスの変数の格納アドレスを知りたい
いつもお世話になります。 Javaの文字列クラスのStringは参照型ですが、この変数の値が格納されたアドレスを知るためにはどうすればよいのでしょうか。eclipse上で、文字列の変数に対してtoString()を試してみたところ、格納されている文字列が出力されました。 ※自作したクラス、たとえばtest.MyClassだとすれば、toString()を用いれば「test.MyClass@01234」というような表記で出力されますが、このような情報を取得するにはどうすればよいでしょうか。 宜しくお願いします。
- ベストアンサー
- Java
お礼
ありがとうございます。 すみません。私の勘違いでした。 (デバッカにて)見ている箇所を間違っていました。
補足
ありがとうございました。 頂いた情報を元に以下の記述でうまくいきました。 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クラスのみを対象にすることは可能でしょうか?