画像内の輪郭の数、ベクトルのサイズは、輪郭上のポイントの数を表します。 Javabeansを理解してください
対応する英語の単語内省は、主にJavabeansの操作に使用されるIntroSpectorです。 Javabeanは特別なJavaクラスであり、いくつかの方法は特定の命名規則を満たしています。 Javaクラスのいくつかの方法が特定の命名規則を満たしている場合、それらはJavabeansとして使用できます。
Javabeanは特別なJavaクラスで、主にデータ情報を渡すために使用されます。このJavaクラスのメソッドは、主にプライベートフィールドにアクセスするために使用され、メソッド名は特定の命名規則に準拠しています。
2つのモジュール間で複数の情報を渡す場合は、この情報をJavabeanにカプセル化できます。これは通常、ValueObject(略してVO)と呼ばれます。この情報は、プライベートフィールドを使用してクラスに保存されます。これらのフィールドの値が読み取られているか設定されている場合、対応するいくつかの方法でアクセスする必要があります。これらの方法の名前は良いと思いますか? Javabeanのプロパティは、その中のメンバー変数に基づいているのではなく、セッターとゲッターメソッドに基づいて決定されます。この方法がSetIDと呼ばれる場合、それは中国語でIDを設定することを意味します。どの変数を保存するかについては、機能しますか?メソッドがgetIDと呼ばれる場合、中国語でIDを取得することを意味します。どの変数からそれを受け取るかについては、それは役に立ちますか?設定されたプレフィックスを削除すると、残りの部分は属性名です。残りの部分の2番目の文字が小文字の場合は、残りの部分の最初の文字を小さなものに変更します。
例えば:
setID() - > idの属性名
Islast()の属性名 - > last
SetCPUの属性名は何ですか? - > cpu
GetUpsの属性名は何ですか? - > ups
要するに、クラスがJavabeanとして使用される場合、Javabeanの特性はメソッド名に基づいて推測され、Javaクラス内のメンバー変数はまったく表示されません。
Javabeansの特性に準拠するクラスは、通常のクラスとして使用できますが、Javabeanとしてそれを使用すると、Javabeansを理解して適用する前に、間違いなくいくつかの追加の利点がもたらされます。利点は次のとおりです。
Javaee開発では、Javabeansがよく使用されます。多くの環境では、Javabeanモードでの操作が必要です。他の人がこれを使用して必要とする場合、選択肢はありません!
JDKは、Javabeansを操作するためにいくつかのAPIを提供し、このAPIのセットは内省と呼ばれます。 GetXメソッドを介して自分でプライベートXにアクセスしたい場合は、どのように行うかが難しいですよね?内省を使用してJavabeansを操作することは、通常のクラスを使用するよりも便利です。
Javabeanの単純な内省
java.beans.propertydescriptorクラスは、主に特定のクラスオブジェクトプロパティセットでjavabeanプロパティを取得するために使用され、getReadMethod()およびgetWriteMethod()メソッドを呼び出して、対応するGETおよびセットメソッドを取得します。
コード例:
ドメインクラス:
[CPP] ViewPlainCopy
intmain()
パッケージusstc.lichunchun.bean; import java.util.date; public class refrectpoint {private date Birthday = new date(); private int x; public string str1 = "ball"; public string str3 = "itcast"; public refrectpoint(int x、int y){super super super x; this.xx = x; this.xx = x; hashcode(){final int prime = 31; int result = 1; result = prime * result + x; result = prime * result + y; return result;}@override public boolean equals(object obj){if(this == obj)return true; if(obj == null)return false; other.x)return false; if(y!= other.y)false; return true;}@override public string toString(){return str1 + ":" + str2 + ":" + str3;} public int getx(){return x;} public void setx(int x){this.x = x;} public inty y;} public date getbirthday(){return Birthday;} public void setbirthday(date Birthday){this.birthday = Birthday;}}}単純な内省操作:
usstc.lichunchun.bean; import java.beans.beaninfo; Import java.beans.introspectionception; Import java.beans.introspectionexception; Import java.beans.introspector; Import java.beans.propertydespriportor; Import.lang.reff.invocationtart java.lang.reflect.method; public class introspectortest {public static void main(string [] args)throws exception {refrectpoint pt1 = new refrectpoint(3、5); string propertyname = "x"; // "x" - > "x" - > "getx" - > methodgety(Pt1、PropertyName); 7; SetProperty(PT1、PropertyName、Value); System.out.Println(PT1.GetX());} Private Static void setProperty(Object Pt1、String PropertyName、Object Value)SlopectionException、Illegalaccessexception、InvocationTargetException pt1.getClass()); method methodsetx = pd.getwritemethod(); methodsetx.invoke(pt1、value);} private static object getproperty(object pt1、string propertyname)は内省的exception、Illegalaccessexception、InvocationTargetException {PropertyDesctriptor PD = New PropertyDescriptor( pt1.getclass()); method methodgetx = pd.getreadmethod(); methodgetx.invoke(pt1);}}}Javabeansの複雑な内省的操作
すべてのBeaninfoのプロパティを通過する方法を使用して、RefectPointオブジェクトのXプロパティを見つけて設定します。このプログラムでは、クラスをJavabeanとして扱うことを意味します。それは、introspector.getbeaninfoメソッドを呼び出すことを意味し、結果のBeaninfoオブジェクトは、このクラスをJavabeanとして扱う結果情報をカプセル化します。
複雑な内省的操作:
usstc.lichunchun.bean; import java.beans.beaninfo; Import java.beans.introspectionception; Import java.beans.introspectionexception; Import java.beans.introspector; Import java.beans.propertydespriportor; Import.lang.reff.invocationtart java.lang.reflect.method; public class introspectortest {public static void main(string [] args)throws exception {refrectpoint pt1 = new Recrempoint(3、5); string propertyname = "x"; // "x" - > "x" - > "getx" - > object retval = getProperty(pt1 propertyname); system.out.println(retval); object value = 7; setProperty(pt1、propertyname、value); system.out.println(pt1.getx());} private static void setProperty(object PT1、String PropertyName、Objectyname)Throws intregectioncectioncectioncection、empleccessexcction、emplegalaccessextergextergextorgexceptioncection = new PropertyDescriptor(PropertyName、PT1.GetClass()); Method MethodSetX = Pd.GetWriteMethod(); MethodSetX.Invoke(PT1、Value);} Private Static Object GetProperty(Object PT1、String PropertyName)Throws IntreSpectionException、Illegalactexception、ILLEGALACTEXCEPTITIN PropertyDescriptor(PropertyName、PT1.GetClass()); Method methodgetx = pd.getReadMethod(); MethodGetX.Invoke(PT1); */beaninfo beaninfo = introspector.getbeaninfo(pt1.getclass()); propertydescriptor [] pds = beaninfo.getpropertydescriptors(); object retval = null; pd.getreadmethod(); retval = methodgetx.invoke(pt1); break;}} return retval;}}}}Beanutils Toolkitを使用してJavabeansを操作します
以前の内省の例に基づいて、Beanutilsクラスを使用して最初に元のセットプロパティを取得し、次に新しい値に設定します。 GET属性が文字列であるときに結果が返されます。設定属性の場合、あらゆる種類のオブジェクトを受け入れることができ、通常は文字列が使用されます。
PropertyUtilsクラスを使用して、最初に元のセットプロパティを取得し、次に新しい値に設定します。 GET属性が属性の元のタイプである場合、および設定属性が属性の元のタイプのみである場合、結果は返されます。
注:これらの2つのクラスを使用する前に、2つのJARパッケージCommons-Beanutils.jarとcommons-logging-1.1.jarをEclipseプロジェクトのLIBフォルダーとAddToBuildPathにインポートする必要があります。
コード例:
usstc.lichunchun.bean; import java.beans.beaninfo; Import java.beans.introspectionception; Import java.beans.introspectionexception; Import java.beans.introspector; Import java.beans.propertydespriportor; Import.lang.reff.invocationtart java.lang.reflect.method; Import org.apache.commons.beanutils.beanutils; import org.apache.commons.beanutils.propertyutils; public static void main(string [] args)throws excements(3、5、5); "x"; // "x" - > "x" - > "getx" - > methodgetx-> object retval = getProperty(pt1、propertyname); out.println(retval); object value = 7; setProperty(pt1、propertyname、value); "x")。getClass()。getName()); // string beanutils.setProperty(pt1、 "x"、 "9"); out.println(pt1.getx());/* map = {name: "zxx"、age:18}; */beanutils.setProperty(PT1、 "Birthday.time"、 "111"); //サポート属性チェーンSystem.out.println(beanutils.getProperty( "Birthday.time")); propertyutils.setProperty(PT1、 "X"、23); System.out.out.out.Out.Out.Out.Propertln "x")。getClass()。getName()); // integer/* beanutilsとpropertyutilsの違い:beanutilsはjavabeansを弦の形で操作し、マップクラスを操作し、互いに変換することができます。 string propertyName、object value)introspectionexception、Illegalaccessexception、rikocationTargetException {propertydescriptor pd = new PropertyDescriptor(PropertyName、Pt1.GetClass()); Method MethodSetx = Pd.GetWriteMethod(); MethodSetX.Invoke(PT1、value);} private static Object getProperty(Object PT1、String PropertyName)Slows IntroSpectionException、Illegalaccessexception、InvocationTargetException {/* PropertyDescriptor PD = new PropertyDescrassor(PropertyName、PT1.GetClass()); Method methodgetx = pd.getReadMethod(); MethodGetX.Invoke(PT1); */beaninfo beaninfo = introspector.getbeaninfo(pt1.getclass()); propertydescriptor [] pds = beaninfo.getpropertydescriptors(); object retval = null; pd.getreadmethod(); retval = methodgetx.invoke(pt1); break;}} return retval;}}}}要約します
上記は、Javaの内省的インスタンスの分析に関するものであり、すべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!