Java thiaj yuav, Introspection thiab Customization – Yooj yim zog

Java Reflection

Java thiaj yuav

Txheej txheem cej luam: Nyob rau hauv daim ntawv no peb yuav tham txog thiaj yuav, introspection thiab customization nyob hauv Java cov noob taum. Cov no yog ib qho tseem ceeb sib nrauj Java programming lus uas ncav lub dynamism rau peb siv runtime.







Taw qhia:
Mus tom nws tsev thiab introspection yog ob qho tseem ceeb nta cov Java programming. Cov no muaj tau nrog lub JDK 1.1 cia tus developers dynamically Meskas thiab siv txoj cai rov. Cov nta pub ib yam twj paj nruas mus nrhiav tau nws cov lus qhia txog lwm yam khoom ntawm runtime. Thiaj yuav tso cai rau cov tsim tawm los ua tau ib yam khoom uas yuav:

  • Tsim tshiab zoo muaj kev kawm thiab cov arrays.
  • Kev teb tej khoom siv los yog kawm thiab hloov tau yog hais tias yuav tsum tau.
  • Ua tau rau tus hau kev hauv tej khoom siv los yog kev kawm.
  • Saib tau lub ntsiab ntawm cov arrays thiab hloov tau yog hais tias yuav tsum tau.

Ib qho yuav sib ceg tias tag nrho cov chaw hais los saum toj no muaj nyob rau tej kwv oriented programming lus. Tiam sis nyob hauv java cov kev pab los ntawm kev mus tom nws tsev peb yuav cuag no tsis paub txog lub npe ntawm cov hoob los sis paj nruas hauv cov hauj lwm no puas yuav tau compile lub sij hawm lub xeev thiab cwj pwm ntawm cov hoob kawm los yog kwv yog khom ntawm runtime. Daim duab hauv qab no qhia tau hais tias lub luag hauj lwm ntawm thiaj yuav nyob Java programming:

Java Reflection

Java thiaj yuav

Daim duab 1: Thiaj ua rau Java programming

Introspection hauv java siv lub ntsiab lus teb ntawm Java taum uas nyiaj thiab lub sij lub qauv tivthaiv ntawm java. Introspection feature enables ib java taum tau txais cov khoom, txoj kev thiab cov txheej xwm uas lwm lub noob taum thaum runtime. Qhov no yuav pab tus developers tsim thiab tsim noob taum lawv tsis paub txog cov lus uas lwm cov noob taum.

Introspection thiab thiaj yuav yog leej sib thooj. Thiaj yog cov uas tsis muaj qib feature uas tso cai rau peb chaws mus xyuas lub internals ntawm cov hoob los sis cov khoom ntawm runtime lwm. Introspection raws li no feature thiab muab ib tug Nhav interface mus xyuas lub noob taum thaum runtime. Tiag introspection feature siv cov tsis muaj qib thiaj yuav tshawb xyuas cov khoom sab hauv pas.

Thiaj API:
Java 1.1 lub moj khaum thiaj ua tswvcuab. Thiaj yuav yog siv rau cov kev pab cuam uas yuav tsum tau kuaj los yog muab kho dua tus cwj pwm runtime hauv daim ntawv thov uas khiav hauv lub Java virtual tshuab. Qhov no nws yog ib tug ib tug feature tshaj kuj thiab yuav tsum tau siv kev zov utmost. Nrog rau no Disease fact nco, peb yuav hais kom thiaj yuav yog ib tug txheej txheem haib zoo thiab pab tau kev siv ua haujlwm uas yuav tsis yooj yim sua. Peb cia saib mus rau hauv lub qab chaws luj uas qhia tau hais tias cov kev pab uas mus tom nws tsev:

Qhia 1: Ib tug qauv kawm siv lub tswv yim thiaj yuav

[Chaws]

pob com.Home.reflect;

ntshuam java.lang.reflect.Array;

ntshuam java.lang.reflect.Field;

ntshuam com.home.VO.EMPVO;

pej xeem hoob DemoReflect {

pej xeem zoo li qub Txoj hlua pob tseg(Nruas obj, rau cov menyuam callCount) {

callCount ;

StringBuffer tabs = tshiab StringBuffer();

rau (rau cov menyuam k = 0; k < callCount; k ) {

tabs.append(“\t”);

}

Tsis StringBuffer = tshiab StringBuffer();

Chav kawm ntawv clazz = obj.getClass();

Yog hais tias (clazz.isArray()) {

buffer.append(“\n”);

buffer.append(tabs.toString());

buffer.append(“[“);

rau (rau cov menyuam Kuv = 0; Kuv < Array.getLength(obj); i ) {

Yog hais tias (Kuv < 0)

buffer.append(“,”);

Tsis muaj tus nqi = Array.tau(obj, Kuv);

Yog hais tias (value.getClass().isPrimitive() ||

value.getClass() == java.lang.Long.hoob ||

value.getClass() == java.lang.String.hoob ||

value.getClass() == java.lang.Integer.hoob ||

value.getClass() == java.lang.Boolean.hoob

) {

buffer.append(tus nqi);

} ntxiv {

buffer.append(pob tseg(tus nqi, callCount));

}

}

buffer.append(tabs.toString());

buffer.append(“]\n”);

} ntxiv {

buffer.append(“\n”);

buffer.append(tabs.toString());

buffer.append(“{\n”);

Thaum (clazz != thov) {

Teb[] liaj teb = clazz.getDeclaredFields();

rau (rau cov menyuam Kuv = 0; Kuv < fields.length; i ) {

buffer.append(tabs.toString());

liaj teb[Kuv].setAccessible(tseeb);

buffer.append(liaj teb[Kuv].getName());

buffer.append(“=”);

sim {

Kwv objVal = teb[Kuv].tau(obj);

Yog hais tias (objVal != thov) {

Yog hais tias (objVal.getClass().isPrimitive() ||

objVal.getClass() == java.lang.Long.class ||

objVal.getClass() == java.lang.String.class ||

objVal.getClass() == java.lang.Integer.class ||

objVal.getClass() == java.lang.Boolean.class

) {

buffer.append(objVal);

} ntxiv {

buffer.append(pob tseg(objVal, callCount));

}

}

} ntes (IllegalAccessException e) {

buffer.append(e.getMessage());

}

buffer.append(“\n”);

}

clazz = clazz.getSuperclass();

}

buffer.append(tabs.toString());

buffer.append(“}\n”);

}

rov qab mus buffer.toString();

}

pej xeem zoo li qub khoob lug ntsiab(Txoj hlua[] args) {

EMPVO emp = tshiab EMPVO();

emp.setEmpNo(1);

emp.setEmpName(“John”);

Tsim.tawm.println(DemoReflect.pob tseg(emp, 5));

}

}

[/Chaws]

Qhia 2: Cov chav kawm ntawv EMP VO

[Chaws]

pob com.home.VO;

pej xeem hoob EMPVO {

lwm yam rau cov menyuam empNo;

lwm yam Txoj hlua empName;

/**

* @return lub empNo

*/

pej xeem rau cov menyuam getEmpNo() {

rov qab mus empNo;

}

/**

* @param empNo lub empNo teev

*/

pej xeem khoob lug setEmpNo(rau cov menyuam empNo) {

no.empNo = empNo;

}

/**

* @return lub empName

*/

pej xeem Txoj hlua getEmpName() {

rov qab mus empName;

}

/**

* @param empName lub empName teev

*/

pej xeem khoob lug setEmpName(Txoj hlua empName) {

no.empName = empName;

}

}

[/Chaws]

API thiaj yuav muaj cov nram qab no kawm los ntawm java.lang thiab java.lang.reflect pob:

  • Chav kawm ntawv
  • Array
  • Constructor
  • Teb
  • Neeg
  • Txujci
  • Modifier








Cov kev txwv ntawm kev mus tom nws tsev:
Thiaj yuav muaj hwj huaj tshaj thiab yuav tsum tau siv kev zov utmost. Nws yuav tsum yog siv xwb rau qhov teeb meem no thaum muaj lwm yam tsis muaj kev xaiv uas nyob raws li nws tau ntawm cov kev txwv nram qab no:

  • Nyiaj siv ua haujlwm kev kawm: Vim koj thiaj yuav siv cov kev uas yuav daws dynamically, tej tus JVM optimizations tsis tau. Raws li qhov tsim nyog tau ib, paab haujlwm qeeb qeeb tshaj qhov sawv daws yuav paab tsis yog.
  • Txwv tsis pub kev ruaj ntseg: Thiaj yuav tsum tau muaj tso runtime cai uas yuav tsis tau nyob rau thaum khiav li ib tus thawj tswj ruaj ntseg. E.g. tus applet uas sau nyob rau hauv ib lub ntsiab lus teb txwv kev ruaj ntseg.
  • Nphav raug internals: Vim koj thiaj yuav tso cai rau qhov chaws ua haujlwm uas yuav tsis raug cai rau ib qhov chaws uas tsis yog paab e.g. tus txheejtxheem qhov chaw teb thiab cov hau kev, thiaj yuav siv tej zaum yuav raug nyob hauv ib co pliaj phiv.

Lub Introspection API:
Introspection yog ib txoj kev rho uas cov taum tsim qauv yog analyzed rau extract taum lub zog, txheej xwm, thiab txoj kev. Introspection muaj tej yam zoo kawg thiab zoo li nyob rau hauv:

  • Re-usability.

Introspection API muaj cov nram qab no kawm los ntawm cov java. Taum pob:

  • BeanDescriptor
  • BeanInfo
  • FeatureDescriptor
  • EventSetDescriptor
  • MethodDescriptor
  • PropertyDescriptor
  • IndexedPropertyDescriptor
  • Introspector
  • SimpleBeanInfo

Mus tom nws tsev thiab introspection yog ib qho tseem ceeb sib nrauj Java programming thiab tsuas yog siv xwb thaum tsim nyog kiag li. Snippet chaws hauv qab no qhia tau hais tias thaum lawv tseem mus tom nws tsev thiab introspection:

Qhia 3: Coj cai qhia introspection

[Chaws]

pob com.Home.reflect;

ntshuam java.lang.reflect.Method;

pej xeem hoob DemoIntroSpect {

pej xeem zoo li qub khoob lug ntsiab(Txoj hlua[] args) {

sim {

Chav kawm ntawv clazz = kawm.forName(“com.home.VO.EMPVO”);

Txujci [] kev = clazz.getMethods();

rau (Hom qauv : txoj kev) {

Tsim.tawm.println(“Lub npe hom = ” +method.getName());

}

} ntes (ClassNotFoundException e) {

// TODO Nws pib-generated ntes thaiv

e.printStackTrace();

}

}

}

[/Chaws]

Customization:
Customization muaj cov feature lug hloov cov java taum khoom as per tus yuav tsum tau muaj qhov teeb meem no visually. Thaum lub noob taum yog tsim kom thiaj yuav thiab introspection yuav ua li, peb yuav tsum kuaj peb chaws mus xyuas seb cov nta tau tshwm sim los tsis. E.g. peb muab lub moos taum. Tus neeg siv yuav tsum tau muaj lub hwj huam rau nws cov los analog customize raws li tej yam khoom. Ib co kev builders e.g. netbeans IDE siv cov cuab yeej los xij thiaj li customize lub noob taum.








Txoj kev:

Thiaj yuav, introspection thiab customization tas nrho peb cov nyob lwm. Mus xaus no npe qhia rau peb saib lub ntsab lug zoo li cas peb sab laj saum toj no rau lub cia nyias qhov nram qab no raws li:

  • Thiaj yuav tau nkag tau rau hauv Java 1.1.
  • Thiaj yuav tso cai rau cov tsim tawm los tsim cov khoom ntawm runtime uas yuav :
    • Tsim tshiab zoo muaj kev kawm thiab cov arrays.
    • Kev teb tej khoom siv los yog kawm thiab hloov tau yog hais tias yuav tsum tau.
    • Ua tau rau tus hau kev hauv tej khoom siv los yog kev kawm.
    • Saib tau lub ntsiab ntawm cov arrays thiab hloov tau yog hais tias yuav tsum tau.
  • Mus tom nws tsev thiab Introspection twb tau txais tej drawbacks raws li nyob rau hauv :
    • Siv cov nta ntaub ntawv ntawm qhov kev pab cuam degrades.
    • Tus yuav qhib thaum lub internals raug.
    • Uas tsis nyob rau hauv txoj kev invocation yog pheej nrhiav tau lwm lub sij hawm cia. Nyob zoo ce no yog ntes tau los ntawm cov compiler compile lub sijhawm.
    • Tus yuav nyuab ntau thiab nws yuav tsis yooj yim rau koj khaws cia.
============================================= ============================================== Yuav zoo TechAlpine phau ntawv rau Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Txaus siab rau qhov blog? Tshaj tawm lus thov :)

Follow by Email
LinkedIn
LinkedIn
Share