2

依存関係 jarがあります。ビルド A の場合、dependency.jar にはクラス A、B、C、D が含まれます。ビルド B の場合、dependency.jar にはクラス A、B、C のみが含まれます。

問題:

ソース: 私のコードはすべてのクラス A、B、C、D を利用しています。

目標: 私が書いたコードは、ビルド A と B で同じままであるべきです。

問題: しかし、明らかにクラス D はビルド B では使用できません。したがって、私のコードはクラス D の可用性を処理する必要があります。同時に、クラス D の可用性を処理するために追加する追加のコードは、速度が低下しないはずです。私のコード。

可能な解決策を提案してください。

1 つの解決策: Class.forName() API を使用して、クラスの可用性を確認します。

解決策の問題: API は、利用できない場合は毎回 classdefnotfound をスローし、私の理解によれば、class.forName はクラスをロードしようとするため、遅くなります。

注: クラス D はオプションです。利用できない場合は、そのクラスに関連する機能を無効にする必要があります。

4

2 に答える 2

1

メソッド getResource() は、任意のクラスのクラスまたはクラス ローダー オブジェクトで使用できます。null を返す場合、クラスは以下のように存在しません

URL url=SomeClass.class.getClassLoader().getResource("className.class");
 if(url==null)//class not present
于 2013-08-16T09:44:15.583 に答える
0

データベース ドライバーの場合と同じように、リフレクションを使用してクラス D を動的にロードし、そのメソッドを呼び出す必要があります。コード内でクラスを直接参照することはできません。それ以外の場合、コードはコンパイルされず、クラスが利用できないと文句を言います。クラスを実行時にロードできる場合は、必要な機能をオンにしてからオフにします。

于 2013-08-16T09:55:15.460 に答える