3

この方法でリソースをロードするコードを見つけました:

Class.forName(myClass.class.getName()).getResourceAsStream("myResource");

まず、そのような構造を使用することの面白さについて疑問に思いました。必要な場合にのみクラスをロードし、動的ロードを有効にしているようClass.forName("className")です (これは、たとえば、JDBC ドライバーをロードするときの典型的な構造です)。

しかし、この場合、クラスはコード内にあるため、動的ロードは非効率的ではありませんか? 以下のように書いても何か違いはありますか?

myClass.class.getResourceAsStream("myResource");
4

2 に答える 2

1

mmyClass.class.getResourceAsStream("myResource");検索を行わないため、オプションを優先する必要があります。定義済みの文字列だけでなくmyClass.class.getName()で使用されるため、結果は同じです。forName

于 2012-12-18T07:41:45.413 に答える
0

あなたの質問は、書かれているほど意味がありません。 Class.forNameと、Class.getResourceAsStreamさまざまなことを行っています。それらは交換可能です。

それらを比較する唯一の方法はstatic、データで初期化された(たとえば)フィールドでいっぱいのクラスのロードと、同じデータを含むリソースの読み取りを比較する場合です。それがあなたがよりよく話していることである場合、getResourceAsStreamアプローチは多くの点で優れています。

  • その方法で読み取ることができるデータの量に制限はありません。
  • データを「コード」に埋め込む必要はありません。
  • メモリフットプリントが小さくなり、
  • 必要なデータのサブセットのみをロードできます。
  • それはおそらくより高速です、
  • 等々。

を使用して (通常の意味で) クラスをロードできるかどうかを尋ねる場合getResourceAsStream()、答えはノーです。確かにバイトコードを取得できますが、それらのバイトコードをJVMで実行可能なクラス/メソッドに変換するには、「その他のこと」を行う必要があります。

于 2012-12-18T07:51:25.813 に答える