後ごく最近のJavaを学び始め、フレームと、この2日間の接触が非常に反射の概念について混乱している、オンライン検索での情報の多くは、それらのほとんどは、リフレクションを使用する方法について話していることがわかりました。反射の原理と反射がストレスの多くは比較的あいまいさがあるにもかかわらず、比較的小さい理由。
参考:Javaのリフレクションを理解する方法を学ぶのか?-ほとんど知っている-羅は、解答への書き込みをコードしません)
その後、最終的にはほとんど反射の役割の話を知っている答えを見つけることが、私は記録若干の個人的な意見で、非常によくそれを置くと思います。
シンプルな果実植物
マスタAは、植物反射の作用のモードを説明するために簡単な例を使用します。
// Fruit接口
public interface Fruit {
public void eat();
}
// Apple类
public class Apple implements Fruit{
public void eat() {
System.out.println("eat apple.");
}
}
// Factory 用于生产Fruit
public class Factory {
public static Fruit getInstance(String className){
if(className.equals("Apple")){
return new Apple();
}else{
return null;
}
}
}
// demo
Fruit f = Factory.getInstance("Apple");
f.eat();
これは、工場出荷時のパターン、どのような種類の果実生産に渡されたパラメータの決定する裁判官によって工場の簡単な例です。ここで私が説明するのは非常に簡単な概略図を描きます:
コードとの組合せの概略図:需要を来デモ用途文字列は、植物は、農産物のフルーツに新しいオブジェクトを使用して、条件が要求かどうかを判断するために使用しました。そして、判定部と、深刻な需要の結合があります:すべての変更要求は、それに応じて変更を決定するために必要とされます。果物のI種需要が増えるたび、それははるか判断で条件分岐です。
反射し、使用
このコードは非常に簡単ですので、単一のクラスにコードを変更することは面倒ではありません。私たちは植物のさまざまな種類の果物を生産した場合も、関連する要件に合格する必要があり、果物(フルーツジュースを生産する)他の植物がある場合、百、千持って、それが完全に解決することはできません。反射は、この問題を解決することができるようになります:
// 重写Factory的代码
public class Factory {
public static Fruit getInstance(String className){
// if(className.equals("Apple")){
// return new Apple();
// }else{
// return null;
// }
Fruit f = null;
try {
f = (Fruit) Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
我々は、オブジェクトのクラスに対応する反射型を通過した文字列への直接アクセスを使用し、それによって、需要増加で繰り返しコード決意セクションを変更する必要がなくなり、フルーツ・エンティティ・クラス・オブジェクトの対応する使用を作成します。(これは呼ばれるべきデカップリングも説明するための図で、それを):
原判決の部分的な交換が言うことですつまり、反射となりました:
- 植物によって決定もはや必要としません
- 需要がクラスを見つけるために、直接反射を通じてJVMに渡されます
人気の説明
コードの反射が使用されていない前に、我々は特別注文の管理者に工場を想像することができる、と自分の手を要求する各締約後に受信した管理者の注文フォームの生産(判定コード)を比較するために、フォームがこの1ので、管理者は、に行く場合は、生産ライン(JVM)上での生産を開始するために必要。
新たな需要の増加が、その場合は、管理者のコマンドラインを受け取った後、彼らは、生産(クラスローダ関連コンテンツ)の製造を開始、生産の形はまた、非常に厄介な、同期を更新する必要があります。そして、多くの工場では、新しい要件は、フォームが非常に困難であるたびに更新されます。
したがって、管理者が直接(決意部をキャンセル)解雇、およびパーティラインからの直接接続、生産ラインは、需要に応じて、生産のための生産ラインを直接参照する必要があります。
この図は、複数の基本クラスローダの概念に関連する、クラスローダは、この絵を見てすることができますし、実際のクラスは、対応をアップロードされました。