JAVA高級用法——反射(一)
8157 ワード
引用:ここでは、工場モードとインタフェースを組み合わせて、反射に対する理解を記録する.コードとテキストの部分はネットワークに由来します.それを再整理した.反射メカニズムは一般の開発者にとって、意味は大きくなく、一般的にはいくつかのシステムのアーキテクチャ設計として使用されており、今後学習するオープンソースフレームワークを含め、ほとんどが反射メカニズムを使用している.
はんしゃ概念反射後の「逆」は、「正」に対するものである.何が正しいの?クラスを使用してオブジェクトを構築するプロセスです.クラス-->オブジェクト;したがって、「逆」は、オブジェクト-->クラスです. のインバース操作は、getClass()メソッドを使用することによって、オブジェクトが存在する「package.Class」を取得し、Classクラスオブジェクトを返します.これがすべての反射メカニズムの根源です.
クラスを取得する3つの方法 ObjectクラスのgetClass()メソッドを介して、このメソッドを使用することはめったにありません: 「クラス.class」を使用してClassオブジェクトを取得: Classクラスの内部定義を使用したstaticメソッド: 反射によるオブジェクトのインスタンス化:
適用中の反射「オブジェクトを反射する」セクションでは、オブジェクトのインスタンス化操作についてnewキーワードのほかに、反射メカニズム操作が1つ増え、複雑さが増していますが、何の役に立ちますか?プログラムの開発モデルでは,結合をできるだけ減らすことが求められてきたが,結合を減らす最善の方法はインタフェースを用いることであるが,インタフェースを用いてもキーワードnewは避けられない.だからnewは結合をもたらす鍵です.しかし,反射機構とインタフェースによりnewによる結合を回避できる. 原版工場設計モード 反射メカニズムのファクトリクラスを使用し、ここでは3番目のClassオブジェクトを取得する方法を使用します.
はんしゃ概念
package reflection;
class Apple
{
}
public class Demo
{
public static void main(String[] args) throws Exception
{
Apple a = new Apple(); //
System.out.println(a.getClass().getName());//
}
}
クラスを取得する3つの方法
package reflection;
class Apple
{
}
public class Demo
{
public static void main(String[] args) throws Exception
{
Apple a = new Apple(); //
System.out.println(a.getClass().getName());//
}
}
package reflection;
class Apple
{
}
public class Demo
{
public static void main(String[] args) throws Exception
{
Class c = Apple.class;
System.out.println(cls.getName());
}
}
package reflection;
class Apple
{
}
public class Demo
{
public static void main(String[] args) throws Exception
{
Class cls = Class.forName("reflection.Apple");
System.out.println(cls.getName());
}
}
package reflection;
class Apple
{
@Override public String toString()
{
return "eating an apple...";
}
}
public class Demo
{
public static void main(String[] args) throws Exception
{
Class cls = Class.forName("reflection.Apple");
Object obj = cls.newInstance(); // , new
Apple a = (Apple) obj;//
System.out.println(obj);
}
}
適用中の反射
package reflection;
interface Fruit
{
public void eat();
}
class Apple implement Fruit
{
public void eat()
{
System.out.println("eating an apple...");
}
}
class Factory
{
public static Fruit getInstance(String className)
{
if("Apple".equals(className))
{
return new Apple();
}
return null;
}
}
public class FactoryDemo
{
public static void main(String[] args)
{
Fruit f = Factory.getInstance("Apple");
f.eat();
}
}
/**
* , :
* , Factory , Factory getInstance
* new, , 。
*/
package reflection;
interface Fruit
{
public void eat();
}
class Apple implement Fruit
{
public void eat()
{
System.out.println("eating an apple...");
}
}
class Orange implement Fruit
{
public void eat()
{
System.out.println("eating an orange...");
}
}
class Factory
{
public static Fruit getInstance(String className)
{
Fruit temp = null;
try
{
temp = (Fruit)Class.forName(className).newInstance();
}
catch(Exception e)
{
e.printStackTrace();
}
return temp;
}
}
public class FactoryDemo
{
public static void main(String[] args)
{
Fruit apple = Factory.getInstance("reflection.Apple");
apple.eat();
Fruit orange = Factory.getInstance("reflection.Orange");
orange.eat();
}
}
/**
* , Factory ,
*/