Java反射メカニズム学習ノート

1150 ワード

以前作った通信プラットフォームのものをステータスマシンの処理メカニズムに加えて次のセキュリティ検証プロジェクトに適用し、拡張性が高いため、ステータスマシンのイベント、ステータスマシンの変換テーブルなどをXMLファイルに含めることにしました.これにより、従来のメッセージング処理メカニズムのニーズを満たすことができ、後でステータスマシンにステータスやイベント動作などを加えてシステムの機能を強化することができる.性能については,システム初期化時にXMLを1回解析してメモリに格納するだけであるため,全体的にシステムの性能に大きな影響を及ぼさない.
OK、本題に戻り、Javaの反射メカニズムを語るものは、ステートマシンではCommandのモードを採用しているので、設定可能にするにはActionの名前と対応するクラスに対してプロファイルを作成し、Actionを実行する必要があるときにClassを通過する.forName(「PeerAction」)は、クラスPeerActionのクラスインスタンスを取得するために使用される.问题が出てきて、ネット上で半日の资料を探してどうしても出てこないで、ClassNotFoundExceptionと言います....半日やってやっと気づいたのは私のクラスPeerActionのコンストラクション関数がパラメータを持っているからです...パラメータを持つとこの方法でインスタンス化されます
(PeerAction) Class.forName("psm.A_Create_New").getConstructor(String.class).newInstance("A_Create_New")

説明の下で、getConstructorは構造関数を得て、中のStringです.classは関数を構築するパラメータのタイプで、後ろのA_Create_Newは伝達されるパラメータです.これにより,構造関数バンドパラメータの反射機構の応用を解決した.
もう一つの問題は、私が上記の方法で最初から自分の機の上で死人でもだめだったのか、それともそのClassNotFoundExceptionの間違いなのか、他の人の機の上で彼はokだったのかということです.長い間気がふさいでいたのは、私のファイルがパッケージfsmに建てられているからです.次はClassですforNameの場合は上のようにクラスの前にパッケージの名前を付けておくことを覚えておいてください...
これだけ書いて、似たような問題にぶつかった友达に助けてほしいです.