問題
今日私は尋ねました:Javaリフレクションがシステム内のオブジェクトを取得し、これらのオブジェクトのメソッドを呼び出したり、オブジェクトの属性値を変更したりできることを知っています。今日の問題は、クラスを記述するときにどのように記述するかです。リフレクションによる影響が少ないコード。簡単に言えば、リフレクションによって呼び出された場合、フラッシュバック、混乱などの状況は少なくなります。さらに、これは私たちの日常のコーディングとどのように関係していますか?
答え
まず、リフレクションで何ができるかを見てみましょう。
- コンストラクタを自由に呼び出してオブジェクトを作成します。
- オブジェクトのメソッドを自由に呼び出します。
- オブジェクトのさまざまなプロパティを自由に変更します。
最初のポイントとして、私たちの啓蒙は、クラスのコンストラクターを作成した後、どの属性が空である可能性があるかを理解する必要があることです。したがって、各メソッドで、空の可能性がある場合に対応する処理がある場合があります。
2番目の点については、最初の書き込み時にこれを保証できる可能性があるため、コードはいくつかのメソッドが順番に実行されることを予期しないことが最善ですが、コードの反復的な変更の過程では、この点は保証されない可能性があります。予期しないバグがいくつかあります。
3番目の点については、コードのロジックを通じておなじみの値を判断しないことをお勧めします。最初に書いたとき、属性には値が必要なためです。同様に、反復するとき、属性値はnullになる場合があります。 。
Javaソースコードの共通の処理方法を共有するのが最善です。
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
Node<K,V>[] tab; Node<K,V> p; int n, i;
if ((tab = table) == null || (n = tab.length) == 0)
n = (tab = resize()).length;
...
}
これはHashMapソースコードの小さなスケッチです。彼がタブ変数を使用してテーブルを保存していることがわかります。これの利点は、後続のテーブルが他のオブジェクトを参照した後、このメソッドの実行が影響を受けないことです。マルチスレッドの同時実行によって引き起こされる不明なエラーを防止します。