- ベストアンサー
継承したクラスのクラス名の取得方法
Tacosanの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
ん~, 見た感じだと DerivedClass のコンストラクタで ClassName を設定する ことができるような気がするんだけど....
関連するQ&A
- 呼び元のファイル名、行数を取得したい
Visual Basic 2005で開発を行っています。 今回ログクラスを作成するに当たり、ログを出力する命令が発行された際に、 その呼び元であるクラス名、メソッド名、できればファイル名やその行数 を取得したいと思っています。 ネットで調べてみましたが、 New StackTrace().GetFrame(1).GetMethod().DeclaringType.ToString() New StackTrace().GetFrame(1).GetMethod().Name のようにして呼び元のクラス名、メソッド名の取得は出来たのですが、 ファイル名、行数などの取得が出来ません。 log4netを調べてみようかと思いましたが、ちゃちゃっと解析できるわけもなく・・・。 調べていたらデバッグシンボルを設定してあげると New StackTrace().GetFrame(1).GetFileName などが使えるようなのですが、そのデバッグシンボルの 設定の仕方が分かりません・・・。 どなたかファイル名、行数を取得する方法をご教示下さい。 また、それでデバッグシンボルというものの設定が必要であれば その設定方法もお願い致します。
- ベストアンサー
- Visual Basic
- リフレクション 可変長引数メソッドの取得
リフレクションで、(1)の方のメソッドインスタンスを得たいとき、どういった方法が考えられますか? //JDK 6.0 public Hoge { void method1(String str, Object ...objs){}//(1) void method1(String str, String str2){}//(2) } Hoge hoge = new Hoge(); Class c = hoge.getClass(); Method m12 = c.getMethod("method", String.class, String.class); Method m11 = c.getMethod("method", ?? );
- ベストアンサー
- Java
- インスタンス内から自分のクラス名を取得する方法
クラスインスタンス内から自分のクラス名を取得しようと思うと、self.class.nameで取得できますが、type.nameでも取得できます。 しかし、typeは非推奨メソッドとなっているため、警告が出て、このままでは使用することができません。 素直にself.classを使えばいいのかもしれませんが、selfのワンクッションがどうにも気に入りません。 スマートな記述方法あったら教えて下さい。 # self.class.nameを使用する場合 class MyClass def print_classname puts self.class.name # puts class.name これはエラー end end # type.nameを使用する場合 class MyClass2 def print_classname puts type.name # これはdeprecatedの記述で警告が出る end end
- 締切済み
- Ruby
- リフレクション
リフレクションによって、Stringの値(strVal)を各クラスのオブジェクトに変換したいと思っております。 下のようなコードで、this.typeにセットしてあるオブジェクトのvalueOfメソッドを実行したいのですが、clazz.getMethod部分で次のようなExceptionが発生してしまいます。 staticメソッドはgetMethodでは取得・実行できないのでしょうか? ご存知の方いらっしゃいましたら、教えて頂けないでしょうか。 【Exception】 java.lang.NoSuchMethodException: java.lang.String.valueOf() 【コード】 Class clazz = Class.forName(this.type); Method method = clazz.getMethod("valueOf", new Class[0]); return method.invoke(clazz.newInstance(), new Object[]{strVal} ); 今回、this.typeには、"java.lang.String"が入っています。
- ベストアンサー
- Java
- 全パッケージの取得、全クラスの取得、全メソッドの取得
やりたい事は、メインクラスより、同階層の全パッケージを取得(A)、 (A)より同階層の全クラスを取得(B)、 (B)より同階層の全メソッドを取得といったような事です。 例えば public class a { public static void main(String args[]) { 全パッケージの取得 全クラスの取得 全メソッドの取得 } } みたいな感じに。 試行錯誤したのですが、その処理を行う事の出来るメソッドかどうかも良く分からないし、 コンパイルエラーになるばかりで実現が出来ません。 ・メインクラスから同階層のパッケージを取得してパッケージ名を出力。 ・メインクラスからxパッケージ内の同階層のクラスを取得してクラス名を出力。 ・メインクラスからxパッケージにあるyクラス内のメソッドを取得してメソッド名を出力。 上記のようなめちゃくちゃシンプルなコードを挙げてご教示願います。
- ベストアンサー
- Java
- 配列クラスのクラス名
配列クラスのクラス名 配列クラスのクラス名を教えてください。 配列はクラスですよね。そこまでは分かります。 こんなコードを実行しましたが System.out.println((new int[0]).getClass()); System.out.println((new boolean[0]).getClass()); System.out.println((new String[0]).getClass()); System.out.println((new Integer[0]).getClass()); 親切にこのような結果を出力してくれます。 class [I class [Z class [Ljava.lang.String; class [Ljava.lang.Integer; 結果として配列が何というクラスなのかは分かりません。 (もしかして『[I』『[Z』『[L』という名前のクラスでしょうか?) 昔Javaのソースを読んだときに、配列クラスのファイルも 読んだことがあるような気がするのですが、 なんと言うクラスだったか忘れてしまいました。 パッケージ名+クラス名を教えてください。 よろしくお願いします。
- ベストアンサー
- Java
- クラスの中のクラスへのアクセス
お世話になります。 クラスが以下のようにあります。 class ClassName1{ var $classname2_obj; // クラス「ClassName2」のオブジェクト function getClassName2Obj(){ return $this->$classname2_obj; } } class ClassName2{ var $array_list; // 配列です function getArrayList(){ return $this->array_list; } } やりたいのは、ClassName1のgetClassName2Obj関数でClassName2の配列をgetArrayListで取得したいのです。 $a = new ClassName1; $b = $a->getClassName2Obj(); $c = $b->etArrayList(); 上の$b = … と$c = …の部分の処理を一行にまとめることはできないでしょうか? 何卒よろしくお願い致します。 PHPは5です。
- ベストアンサー
- PHP
- PHPのクラス継承において質問
class SuperClass{ public function getSuperClassName (){ //操作中のオブジェクトのクラス名を取得する print get_class($this); print "<br />"; print __CLASS__; } } class SubClass extends SuperClass{ public function getSubClassName (){ //操作中のオブジェクトのクラス名を取得する print get_class($this); print "<br />"; print __CLASS__; } $obj = new SubClass(); print "<br />"; $obj -> getSuperClassName(); print "<br />"; $obj -> getSubClassName(); 上記のようなコードがあった場合、 出力結果は SubClass SuperClass //継承しているにもかかわらず、SuperClassという文字列が返る。 SubClass SubClass と上記のようになります この結果に一点疑問があるのですが、親クラスのメソッドは子クラスに継承されるんですよね? であれば親クラスの public function getSuperClassName (){ //操作中のオブジェクトのクラス名を取得する print get_class($this); print "<br />"; print __CLASS__; } の箇所の print __CLASS__; の記述箇所はSubClassとでなければいけないような気がします。 しかし結果はSuperClassとでますが、このメソッドは子クラスに継承されていないのですか? publicなら継承されるとマニュアルにかいてありましたが、どうなっているのでしょうか よろしくご教授御願い致します。
- ベストアンサー
- PHP
- 外部jarの標準出力を取得できますか?
ClassLoaderで外部jarのクラスをロードし、実行するプログラムを作りました。 SimpleOutputは、単に渡された引数を標準出力に出すだけのものです。 この値を取得してGUI上に表示させたいのですが、取得する方法をご教授ください。 System.out.println("Load class"); URL[] urls = { file.toURI().toURL() }; ClassLoader loader = URLClassLoader.newInstance(urls); Class<?> cls = loader.loadClass("SimpleOutput"); System.out.println(cls); Object obj = cls.newInstance(); Method method = cls.getMethod("main", String[].class); String[] av = {"test"}; method.invoke(obj, new Object[]{av});
- ベストアンサー
- Java
お礼
ご返答ありがとうございます。 なるべくDerivedClass側には記述せずにクラス名を取得したいと思ってます。