dポイントプレゼントキャンペーン実施中!

やりたい事は、メインクラスより、同階層の全パッケージを取得(A)、
(A)より同階層の全クラスを取得(B)、
(B)より同階層の全メソッドを取得といったような事です。

例えば
public class a {
public static void main(String args[]) {
 全パッケージの取得
 全クラスの取得
 全メソッドの取得
}
}
みたいな感じに。

試行錯誤したのですが、その処理を行う事の出来るメソッドかどうかも良く分からないし、
コンパイルエラーになるばかりで実現が出来ません。

 ・メインクラスから同階層のパッケージを取得してパッケージ名を出力。
 ・メインクラスからxパッケージ内の同階層のクラスを取得してクラス名を出力。
 ・メインクラスからxパッケージにあるyクラス内のメソッドを取得してメソッド名を出力。

上記のようなめちゃくちゃシンプルなコードを挙げてご教示願います。

A 回答 (3件)

どういったことをされたいのか不明なので断片的な回答になってしまいますが、


自分のパッケージを取得するには
Class#getPackageでできます。
パッケージに属する全てのクラスを取得する方法は、残念ながら存じません。
クラスが持っているメソッドを取得するには、Class#getMethodsで取得できます。

一度、JavaDocを眺めてみては如何でしょう?
java.lang.*とか、java.lang.reflectあたりが参考になると思います。
あとは、リフレクションについても調べてみて下さい。
    • good
    • 0

>Class.forName("xxx.yyy")の部分がClassNotFoundExceptionで落ちてします。



これは、コンパイル時にでるエラーでしょうか?
実行時エラーだと思いますが。
もし、実行時エラーだとしたら該当クラスへのクラスパスが通ってません。
javaファイルとclassライブラリは別物です。
もう一度ご確認してみて下さい。

クラスパスに通っている全てのパッケージを取得するには、Package#getPackagesを使います。
クラスから、メソッドを取得するには、Class#getMethodsを使います。
しかし、残念ながらパッケージに属するクラスは取得できません。
というか、私は発見できませんでした。
    • good
    • 0
この回答へのお礼

有難うございます。
ClassNotFoundExceptionは例外処理を入れてないせいでした。
一度getInterface()でインターフェースを取得出来た時に例外処理をしていないと思ったのですが、
確認したら例外処理してました^^;

しかも良く考えたら、『クラスパスに通っている全てのパッケージを取得』になりますね。
どうにかして『メインクラスと同階層にある全てのパッケージを取得』などを
する事は可能なのでしょうか?
自分で作ったクラスやメソッドだけを取得したいなーという考えだったのですが。

メソッド名を取得してから実行させたい時など、
上記のような事がムリならリテラルしかないのでしょうか?

お礼日時:2006/06/30 15:16

まず、どこまで出来ているのかコードを見せて下さい。


そしたら、どこが間違ってるかアドバイスできるかもしれません。

この回答への補足

ごめんなさい、何にも出来ていません。
Class cls = Class.forName("xxx");
Class[] clss = cls.getClasses();
System.out.println(clss[i].getName());
という感じで利用するのかな?というトコだけです。
パッケージもメソッドも。
でもコンパイルでClass.forName("xxx.yyy")の部分がClassNotFoundExceptionで落ちてします。
xxx.yyyで指定したクラスがあるにも関わらず落ちます。
因みにxxx.yyyの中身は
package xxx;

public class yyy {
public void test() {
System.out.println("abc");
}

}
といった物です。

パッケージが持ってこれればクラスを持って来れそうだし、
クラスを持ってこれればメソッドは持って来れそうという安直な考えより
とりあえずパッケージの取得とクラスの取得とメソッドの取得が
出来るコードを知りたいです。
別にそれらの処理を関連付けて頂く必要は一切ありません。

補足日時:2006/06/30 14:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!