Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Java·´Éä»úÖÆµÄÔ­Àí¼°ÔÚAndroidϵļòµ¥Ó¦ÓÃ
 
×÷Õߣº·è¿ñ¤ÎСʯ×Ó
  3572  次浏览      28
 2020-9-22 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËElasticsearchÊÇʲô£¿ÎªÊ²Ã´Ñ¡ÔñElasticsearch£¿ÈçºÎʹÓÃElasticsearch£¿
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

Ò»¡¢·´ÉäµÄ¸ÅÄî¼°ÔÚJavaÖеÄÀà·´Éä

·´ÉäÖ÷ÒªÊÇÖ¸³ÌÐò¿ÉÒÔ·ÃÎÊ¡¢¼ì²âºÍÐÞ¸ÄËü±¾Éí״̬»òÐÐΪµÄÒ»ÖÖÄÜÁ¦¡£ÔÚ¼ÆËã»ú¿ÆÑ§ÁìÓò£¬·´ÉäÊÇÒ»ÀàÓ¦Óã¬ËüÃÇÄܹ»×ÔÃèÊöºÍ×Ô¿ØÖÆ¡£ÕâÀàÓ¦ÓÃͨ¹ýijÖÖ»úÖÆÀ´ÊµÏÖ¶Ô×Ô¼ºÐÐΪµÄÃèÊöºÍ¼ì²â£¬²¢Äܸù¾Ý×ÔÉíÐÐΪµÄ״̬ºÍ½á¹û£¬µ÷Õû»òÐÞ¸ÄÓ¦ÓÃËùÃèÊöÐÐΪµÄ״̬ºÍÏà¹ØµÄÓïÒå¡£

ÔÚJavaÖеķ´Éä»úÖÆ£¬±»³ÆÎªReflection¡££¨´ó¼Ò¿´µ½Õâ¸öµ¥´Ê£¬µÚÒ»¸öÏë·¨Ó¦¸Ã¾ÍÊÇÈ¥¿ª·¢ÎĵµÖÐËÑÒ»ÏÂÁË¡££©ËüÔÊÐíÔËÐÐÖеÄJava³ÌÐò¶Ô×ÔÉí½øÐмì²é£¬²¢ÄÜÖ±½Ó²Ù×÷³ÌÐòµÄÄÚ²¿ÊôÐÔ»ò·½·¨¡£Reflection»úÖÆÔÊÐí³ÌÐòÔÚÕýÔÚÖ´ÐеĹý³ÌÖУ¬ÀûÓÃReflection APIsÈ¡µÃÈκÎÒÑÖªÃû³ÆµÄÀàµÄÄÚ²¿ÐÅÏ¢£¬°üÀ¨£ºpackage¡¢ type parameters¡¢ superclass¡¢ implemented interfaces¡¢ inner classes¡¢ outer classes¡¢ fields¡¢ constructors¡¢ methods¡¢ modifiersµÈ£¬²¢¿ÉÒÔÔÚÖ´ÐеĹý³ÌÖУ¬¶¯Ì¬Éú³ÉInstances¡¢±ä¸üfieldsÄÚÈÝ»ò»½Æðmethods¡£

ºÃ£¬Á˽âÕâЩ£¬ÄÇÎÒÃǾÍÖªµÀÁË£¬ÎÒÃÇ¿ÉÒÔÀûÓ÷´Éä»úÖÆÔÚJava³ÌÐòÖУ¬¶¯Ì¬µÄÈ¥µ÷ÓÃһЩprotectedÉõÖÁÊÇprivateµÄ·½·¨»òÀ࣬ÕâÑù¿ÉÒԺܴó³Ì¶ÈÉÏÂú×ãÎÒÃǵÄһЩ±È½ÏÌØÊâÐèÇó¡£Ä㵱Ȼ»áÎÊ£¬·´Éä»úÖÆÔÚAndroidƽ̨ÏÂÓкÎÓô¦ÄØ£¿

ÎÒÃÇÔÚ½øÐÐAndroid³ÌÐòµÄ¿ª·¢Ê±£¬ÎªÁË·½±ãµ÷ÊÔ³ÌÐò£¬²¢¿ìËÙ¶¨Î»³ÌÐòµÄ´íÎóµã£¬»á´ÓÍøÉÏÏÂÔØµ½¶ÔÓ¦°æ±¾µÄAndroid SDKµÄÔ´Â루ÕâÀï¸ø´ó¼ÒÌṩһ¸ö2.3.3°æ±¾µÄÏÂÔØÁ´½Ó£©¡£Äã»á·¢ÏֺܶàÀà»ò·½·¨Öо­³£¼ÓÉÏÁË¡°@hide¡±×¢Êͱê¼Ç£¬ËüµÄ×÷ÓÃÊÇʹÕâ¸ö·½·¨»òÀàÔÚÉú³ÉSDKʱ²»¿É¼û£¬ÄÇôÎÒÃǵijÌÐò¿ÉÄÜÎÞ·¨±àÒëͨ¹ý£¬¶øÇÒÔÚ×îÖÕ·¢²¼µÄʱºò£¬¾Í¿ÉÄÜ´æÔÚһЩÎÊÌâ¡£

ÄÇô£¬¶ÔÓÚÕâ¸öÎÊÌ⣬µÚÒ»ÖÖ·½·¨¾ÍÊÇ×Ô¼ºÈ¥µôAndroidÔ´ÂëÖеÄ"@hide"±ê¼Ç£¬È»ºóÖØÐ±àÒëÉú³ÉÒ»¸öSDK¡£ÁíÒ»ÖÖ·½·¨¾ÍÊÇʹÓÃJava·´Éä»úÖÆÁË£¬¿ÉÒÔÀûÓÃÕâÖÖ·´Éä»úÖÆ·ÃÎÊ´æÔÚ·ÃÎÊȨÏ޵ķ½·¨»òÐÞ¸ÄÆäÓò¡£

·Ï»°°ëÌ죬¸ÃÈëÕýÌâÁË£¬ÔÚ½øÈëÕýÌâ֮ǰ£¬ÏȸøÉÏÒ»¸ö·´Éä²âÊÔÀàµÄ´úÂ룬¸Ã´úÂëÖж¨ÒåÁËÎÒÃÇÐèÒª½øÐз´ÉäµÄÀ࣬¸ÃÀಢûÓÐʵ¼ÊµÄÓÃ;£¬½ö¹©×öΪ²âÊÔÀà¡£Ìáʾ£º±¾ÎÄÌṩµÄ´úÂ룬²¢²»ÊÇAndroidƽ̨ϵĴúÂ룬¶øÊÇÒ»¸öÆÕͨµÄJava³ÌÐò£¬½ö½öÊǶÔJava·´Éä»úÖÆµÄDemo³ÌÐò£¬ËùÒÔ´ó¼Ò²»Òª·ÅÔÚAndroidϱàÒë°¡£¬·ñÔò³öÏÖÎÊÌ⣬±ð×·¾¿ÎÒµÄÔðÈÎÀ²£¡

package crazypebble.reflectiontest; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;

public class ReflectionTest extends Object implements ActionListener,Serializable{
// ³ÉÔ±±äÁ¿
private int bInt;
public Integer bInteger = new Integer(4);
public String strB = "crazypebble";
private String strA;

// ¹¹Ô캯Êý
public ReflectionTest() {

}

protected ReflectionTest (int id, String name) {

}

// ³ÉÔ±·½·¨
public int abc(int id, String name) {
System.out.println ("crazypebble ---> " + id + "-" + name);
return 0;
}

protected static void edf() {

}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

}

}

¶þ¡¢·´Éä»úÖÆÖÐÐèҪʹÓõ½µÄÀà

ÎÒ°ÑÐèҪʹÓõÄÀàÁÐÔÚϱíÖУ¬ÆäÖжÔÎÒÃÇÌØ±ðÓÐÓõÄÀ࣬ͨ¹ý×ÅÖØ±ê¼ÇÏÔʾ³öÀ´£¬²¢½«ÔÚºóÃæµÄʹÓÃÖÐÖð²½½âÊÍ£º

Èý¡¢ClassÀà

Ê×ÏÈÏò´ó¼Ò˵Ã÷Ò»µã£¬Class±¾Éí¾ÍÊÇÒ»¸öÀ࣬ClassÊǸÃÀàµÄÃû³Æ¡£¿´ÒÔÏÂÏÂÃæÕâ¸öÀàµÄ¶¨Ò壺

public class MyButton extends Button {...}

×¢Òâµ½ÉÏÃæµÄclassµÄÊ××ÖĸÊÇСд£¬Ëü±íʾµÄÊÇÒ»ÖÖÀàÀàÐÍ£¬µ«ÊÇÎÒÃǵÄClassÊÇÒ»¸öÀ࣬Ï൱ÓÚÉÏÃæ¶¨ÒåµÄMyButtonÀà¡£ËùÒÔ£¬Ç§Íò²»Òª°ÑÕâÀïµÄClass×öΪһ¸öÀàÀàÐÍÀ´Àí½â¡£Ã÷°×ÕâÒ»µã£¬ÎÒÃǼÌÐø¡£

ClassÀàÊÇÕû¸öJava·´Éä»úÖÆµÄÔ´Í·£¬ClassÀà±¾Éí±íʾJava¶ÔÏóµÄÀàÐÍ£¬ÎÒÃÇ¿Éͨ¹ýÒ»¸öObject¶ÔÏóµÄgetClass()·½·¨È¡µÃÒ»¸ö¶ÔÏóµÄÀàÐÍ£¬´Ëº¯Êý·µ»ØµÄ¾ÍÊÇÒ»¸öClassÀà¡£»ñÈ¡Class¶ÔÏóµÄ·½·¨ÓкܶàÖÖ£º

ÔÚÆ½Ê±µÄʹÓã¬Òª×¢Òâ¶ÔÕ⼸ÖÖ·½·¨µÄÁé»îÔËÓã¬ÓÈÆäÊǶÔClass.forName()·½·¨µÄʹÓá£ÒòΪÔںܶ࿪·¢ÖУ¬»áÖ±½Óͨ¹ýÀàµÄÃû³ÆÈ¡µÃClassÀàµÄ¶ÔÏó¡£

ËÄ¡¢»ñÈ¡ÀàµÄÏà¹ØÐÅÏ¢

1¡¢»ñÈ¡¹¹Ôì·½·¨

ClassÀàÌṩÁËËĸöpublic·½·¨£¬ÓÃÓÚ»ñȡij¸öÀàµÄ¹¹Ôì·½·¨¡£

Constructor getConstructor(Class[] params) ¸ù¾Ý¹¹Ô캯ÊýµÄ²ÎÊý£¬·µ»ØÒ»¸ö¾ßÌåµÄ¾ßÓÐpublicÊôÐԵĹ¹Ô캯Êý

Constructor getConstructors() ·µ»ØËùÓоßÓÐpublicÊôÐԵĹ¹Ô캯ÊýÊý×é

Constructor getDeclaredConstructor(Class[] params) ¸ù¾Ý¹¹Ô캯ÊýµÄ²ÎÊý£¬·µ»ØÒ»¸ö¾ßÌåµÄ¹¹Ô캯Êý£¨²»·ÖpublicºÍ·ÇpublicÊôÐÔ£©

Constructor getDeclaredConstructors() ·µ»Ø¸ÃÀàÖÐËùÓеĹ¹Ô캯ÊýÊý×飨²»·ÖpublicºÍ·ÇpublicÊôÐÔ£©

ÓÉÓÚJavaÓïÑÔÊÇÒ»ÖÖÃæÏò¶ÔÏóµÄÓïÑÔ£¬¾ßÓжà̬µÄÐÔÖÊ£¬ÄÇôÎÒÃÇ¿ÉÒÔͨ¹ý¹¹Ôì·½·¨µÄ²ÎÊýÁбíµÄ²»Í¬£¬À´µ÷Óò»Í¬µÄ¹¹Ôì·½·¨È¥´´½¨ÀàµÄʵÀý¡£Í¬Ñù£¬»ñÈ¡²»Í¬µÄ¹¹Ôì·½·¨µÄÐÅÏ¢£¬Ò²ÐèÒªÌṩÓëÖ®¶ÔÓ¦µÄ²ÎÊýÀàÐÍÐÅÏ¢£»Òò´Ë£¬¾Í²úÉúÁËÒÔÉÏËÄÖÖ²»Í¬µÄ»ñÈ¡¹¹Ôì·½·¨µÄ·½Ê½¡£

/**
* »ñÈ¡·´ÉäÀàÖеĹ¹Ôì·½·¨
* Êä³ö´òÓ¡¸ñʽ£º"ModifierÐÞÊÎÓò ¹¹Ôì·½·¨Ãû(²ÎÊýÀàÐÍÁбí)"
*/
public static void get_Reflection_Constructors( ReflectionTest r) {

Class temp = r.getClass();
String className = temp.getName(); // »ñȡָ¶¨ÀàµÄÀàÃû

try {
Constructor[] theConstructors = temp.getDeclaredConstructors(); // »ñȡָ¶¨ÀàµÄ¹«Óй¹Ôì·½·¨

for (int i = 0; i < theConstructors.length; i++) {
int mod = theConstructors[i].getModifiers(); // Êä³öÐÞÊÎÓòºÍ·½·¨Ãû³Æ
System.out.print( Modifier.toString(mod) + " " + className + "(");
Class[] parameterTypes = theConstructors[ i ].getParameterTypes(); // »ñȡָ¶¨¹¹Ôì·½·¨µÄ²ÎÊýµÄ¼¯ºÏ
for (int j = 0; j < parameterTypes.length; j++) { // Êä³ö´òÓ¡²ÎÊýÁбí
System.out.print( parameterTypes[j].getName());
if (parameterTypes.length > j+1) {
System.out.print(", ");
}
}
System.out.println(")");
}
} catch (Exception e) {
e.printStackTrace();
}
}

2¡¢»ñÈ¡ÀàµÄ³ÉÔ±·½·¨

Óë»ñÈ¡¹¹Ôì·½·¨µÄ·½Ê½Ïàͬ£¬´æÔÚËÄÖÖ»ñÈ¡³ÉÔ±·½·¨µÄ·½Ê½¡£

Method getMethod(String name, Class[] params) ¸ù¾Ý·½·¨ÃûºÍ²ÎÊý£¬·µ»ØÒ»¸ö¾ßÌåµÄ¾ßÓÐpublicÊôÐԵķ½·¨

Method[] getMethods() ·µ»ØËùÓоßÓÐpublicÊôÐԵķ½·¨Êý×é

Method getDeclaredMethod(String name, Class[] params) ¸ù¾Ý·½·¨ÃûºÍ²ÎÊý£¬·µ»ØÒ»¸ö¾ßÌåµÄ·½·¨£¨²»·ÖpublicºÍ·ÇpublicÊôÐÔ£©

Method[] getDeclaredMethods() ·µ»Ø¸ÃÀàÖеÄËùÓеķ½·¨Êý×飨²»·ÖpublicºÍ·ÇpublicÊôÐÔ£©

/**
* »ñÈ¡·´ÉäÀàµÄ·½·¨
* ´òÓ¡Êä³ö¸ñʽ£º "RetType FuncName( paramTypeList)"
*/
public static void get_Reflection_Method( ReflectionTest r) {

Class temp = r.getClass();
String className = temp.getName();

/*
* Note: ·½·¨getDeclaredMethods()Ö»ÄÜ»ñÈ¡µ½Óɵ±Ç°ÀඨÒåµÄËùÓз½·¨£¬²»ÄÜ»ñÈ¡´Ó¸¸Àà¼Ì³ÐµÄ·½·¨
* ·½·¨getMethods() ²»½öÄÜ»ñÈ¡µ½µ±Ç°ÀඨÒåµÄpublic·½·¨£¬Ò²Äܵõ½´Ó¸¸Àà¼Ì³ÐºÍÒѾ­ÊµÏÖ½Ó¿ÚµÄpublic·½·¨
* Çë²éÔÄ¿ª·¢Îĵµ¶ÔÕâÁ½¸ö·½·¨µÄÏêϸÃèÊö¡£
*/
//Method[] methods = temp.getDeclaredMethods();
Method[] methods = temp.getMethods();

for (int i = 0; i < methods.length; i++) {

// ´òÓ¡Êä³ö·½·¨µÄÐÞÊÎÓò
int mod = methods[i].getModifiers();
System.out.print( Modifier.toString(mod) + " ");

// Êä³ö·½·¨µÄ·µ»ØÀàÐÍ
System.out.print( methods[i].getReturnType().getName());

// »ñÈ¡Êä³öµÄ·½·¨Ãû
System.out.print(" " + methods[i].getName() + "(");

// ´òÓ¡Êä³ö·½·¨µÄ²ÎÊýÁбí
Class[] parameterTypes = methods[i].getParameterTypes();
for (int j = 0; j < parameterTypes.length; j++) {
System.out.print (parameterTypes[j].getName());
if (parameterTypes.length > j+1) {
System.out.print(", ");
}
}
System.out.println(")");
}
}

ÔÚ»ñÈ¡ÀàµÄ³ÉÔ±·½·¨Ê±£¬ÓÐÒ»¸öµØ·½ÖµµÃ´ó¼Ò×¢Ò⣬¾ÍÊÇgetMethods()·½·¨ºÍgetDeclaredMethods()·½·¨¡£

getMethods()£ºÓÃÓÚ»ñÈ¡ÀàµÄËùÓеÄpublicÐÞÊÎÓòµÄ³ÉÔ±·½·¨£¬°üÀ¨´Ó¸¸Àà¼Ì³ÐµÄpublic·½·¨ºÍʵÏÖ½Ó¿ÚµÄpublic·½·¨£»

getDeclaredMethods()£ºÓÃÓÚ»ñÈ¡ÔÚµ±Ç°ÀàÖж¨ÒåµÄËùÓеijÉÔ±·½·¨ºÍʵÏֵĽӿڷ½·¨£¬²»°üÀ¨´Ó¸¸Àà¼Ì³ÐµÄ·½·¨¡£

´ó¼Ò¿ÉÒԲ鿼һÏ¿ª·¢ÎĵµµÄ½âÊÍ£º

getMethods() - Returns an array containing Method objects for all public methods for the class C represented by this Class.

Methods may be declared in C, the interfaces it implements or in the superclasses of C.

The elements in the returned array are in no particular order.
getDeclaredMethods() - Returns a Method object which represents the method matching the specified name and parameter types

that is declared by the class represented by this Class.

Òò´ËÔÚʾÀý´úÂëµÄ·½·¨get_Reflection_Method(...)ÖУ¬ReflectionTestÀà¼Ì³ÐÁËObjectÀ࣬ʵÏÖÁËactionPerformed·½·¨£¬²¢¶¨ÒåÈçϳÉÔ±·½·¨£º

ͨ¹ýÕâÁ½¸öÓï¾äÖ´ÐкóµÄ½á¹û²»Í¬£º

a¡¢Method[] methods = temp.getDeclaredMethods()Ö´Ðкó½á¹ûÈçÏ£º

b¡¢Method[] methods = temp.getMethods()Ö´Ðк󣬽á¹ûÈçÏ£º

3¡¢»ñÈ¡ÀàµÄ³ÉÔ±±äÁ¿£¨³ÉÔ±ÊôÐÔ£©

´æÔÚËÄÖÖ»ñÈ¡³ÉÔ±ÊôÐԵķ½·¨

Field getField(String name) ¸ù¾Ý±äÁ¿Ãû£¬·µ»ØÒ»¸ö¾ßÌåµÄ¾ßÓÐpublicÊôÐԵijÉÔ±±äÁ¿

Field[] getFields() ·µ»Ø¾ßÓÐpublicÊôÐԵijÉÔ±±äÁ¿µÄÊý×é

Field getDeclaredField(String name) ¸ù¾Ý±äÁ¿Ãû£¬·µ»ØÒ»¸ö³ÉÔ±±äÁ¿£¨²»·ÖpublicºÍ·ÇpublicÊôÐÔ£©

Field[] getDelcaredField() ·µ»ØËùÓгÉÔ±±äÁ¿×é³ÉµÄÊý×飨²»·ÖpublicºÍ·ÇpublicÊôÐÔ£©

/**
* »ñÈ¡·´ÉäÀàÖеÄÊôÐÔºÍÊôÐÔÖµ
* Êä³ö´òÓ¡¸ñʽ£º"Modifier Type : Name = Value"
* Note: ¶ÔÓÚδ³õʼ»¯µÄÖ¸ÕëÀàÐ͵ÄÊôÐÔ£¬½«²»Êä³ö½á¹û
*/
public static void get_Reflection_Field_Value( ReflectionTest r) {

Class temp = r.getClass(); // »ñÈ¡ClassÀàµÄ¶ÔÏóµÄ·½·¨Ö®Ò»

try {
System.out.println("public ÊôÐÔ");
Field[] fb = temp.getFields();
for (int i = 0; i < fb.length; i++) {

Class cl = fb[i].getType(); // ÊôÐÔµÄÀàÐÍ

int md = fb[i].getModifiers(); // ÊôÐÔµÄÐÞÊÎÓò

Field f = temp.getField(fb[i].getName()); // ÊôÐÔµÄÖµ
f.setAccessible(true);
Object value = (Object)f.get(r);

// ÅжÏÊôÐÔÊÇ·ñ±»³õʼ»¯
if (value == null) {
System.out.println( Modifier.toString(md) + " " + cl + " : " + fb[i].getName());
}
else {
System.out.println( Modifier.toString(md) + " " + cl + " : " + fb[i].getName() + " = " + value.toString());
}
}

System.out.println ("public & ·Çpublic ÊôÐÔ");
Field[] fa = temp.getDeclaredFields();
for (int i = 0; i < fa.length; i++) {

Class cl = fa[i].getType(); // ÊôÐÔµÄÀàÐÍ

int md = fa[i].getModifiers(); // ÊôÐÔµÄÐÞÊÎÓò

Field f = temp.getDeclaredField(fa[i].getName()); // ÊôÐÔµÄÖµ
f.setAccessible(true); // Very Important
Object value = (Object) f.get(r);

if (value == null) {
System.out.println( Modifier.toString(md ) + " " + cl + " : " + fa[i].getName());
}
else {
System.out.println( Modifier.toString(md ) + " " + cl + " : " + fa[i].getName() + " = " + value.toString());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

4¡¢»ñÈ¡Àà¡¢ÊôÐÔ¡¢·½·¨µÄÐÞÊÎÓò

ÀàClass¡¢Method¡¢Constructor¡¢Field¶¼ÓÐÒ»¸öpublic·½·¨int getModifiers()¡£¸Ã·½·¨·µ»ØÒ»¸öintÀàÐ͵ÄÊý£¬±íʾ±»ÐÞÊζÔÏó£¨ Class¡¢ Method¡¢ Constructor¡¢ Field £©µÄÐÞÊÎÀàÐ͵Ä×éºÏÖµ¡£

ÔÚ¿ª·¢ÎĵµÖУ¬¿ÉÒÔ²éÔĵ½£¬ModifierÀàÖж¨ÒåÁËÈô¸ÉÌØ¶¨µÄÐÞÊÎÓò£¬Ã¿¸öÐÞÊÎÓò¶¼ÊÇÒ»¸ö¹Ì¶¨µÄintÊýÖµ£¬ÁбíÈçÏ£º

¸ÃÀ಻½öÌṩÁËÈô¸ÉÓÃÓÚÅжÏÊÇ·ñÓµÓÐijÖÐÐÞÊÎÓòµÄ·½·¨boolean isXXXXX(int modifiers)£¬»¹Ìṩһ¸öString toString(int modifier)·½·¨£¬ÓÃÓÚ½«Ò»¸ö±íʾÐÞÊÎÓò×éºÏÖµµÄintÊýת»»³ÉÃèÊöÐÞÊÎÓòµÄ×Ö·û´®¡£

Îå¡¢ÈçºÎµ÷ÓÃÀàÖеÄprivate·½·¨

ÔÚ½éÉÜ֮ǰ£¬ÏÈ·ÅÒ»¸ö´úÂë°É£¬Õâ¶Î´úÂëÊDzο¼ÆäËûÎÄÕµĴúÂ뿽±´¹ýÀ´µÄ£¬´úÂë²»Ë㳤£¬µ«ÊǶ¯Ì¬µ÷ÓÃÀàµÄ³ÉÔ±·½·¨µÄ¹ý³Ì½²½âµÄͨË×Ò×¶®¡£

package crazypebble.reflectiontest;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class LoadMethod {
/**
* ÔÚÔËÐÐʱ¼ÓÔØÖ¸¶¨µÄÀ࣬²¢µ÷ÓÃÖ¸¶¨µÄ·½·¨
* @param cName JavaµÄÀàÃû
* @param MethodName ·½·¨Ãû
* @param types ·½·¨µÄ²ÎÊýÀàÐÍ
* @param params ·½·¨µÄ²ÎÊýÖµ
* @return
*/
public Object Load( String cName, String MethodName, String[] types, String[] params) {

Object retObject = null;

try {
// ¼ÓÔØÖ¸¶¨µÄÀà
Class cls = Class.forName(cName); // »ñÈ¡ClassÀàµÄ¶ÔÏóµÄ·½·¨Ö®¶þ

// ÀûÓÃnewInstance()·½·¨£¬»ñÈ¡¹¹Ôì·½·¨µÄʵÀý
// ClassµÄnewInstance·½·¨Ö»ÌṩĬÈÏÎ޲ι¹ÔìʵÀý
// ConstructorµÄnewInstance·½·¨Ìṩ´ø²ÎµÄ¹¹ÔìʵÀý
Constructor ct = cls.getConstructor(null);
Object obj = ct.newInstance(null);
//Object obj = cls.newInstance();

// ¹¹½¨ ·½·¨µÄ²ÎÊýÀàÐÍ
Class paramTypes[] = this.getMethodTypesClass( types);

// ÔÚÖ¸¶¨ÀàÖлñȡָ¶¨µÄ·½·¨
Method meth = cls.getMethod( MethodName, paramTypes);

// ¹¹½¨ ·½·¨µÄ²ÎÊýÖµ
Object argList[] = this.getMethodParamObject(types, params);

// µ÷ÓÃÖ¸¶¨µÄ·½·¨²¢»ñÈ¡·µ»ØÖµÎªObjectÀàÐÍ
retObject = meth.invoke(obj, argList);

} catch (Exception e) {
System.err.println(e);
}

return retObject;
}

/**
* »ñÈ¡²ÎÊýÀàÐÍ£¬·µ»ØÖµ±£´æÔÚClass[]ÖÐ
*/
public Class[] getMethodTypesClass(String[] types) {
Class[] cs = new Class[types.length];

for (int i = 0; i < cs.length; i++) {
if (types[i] != null || !types[i].trim().equals("")) {
if (types[i].equals("int") || types[i].equals("Integer")) {
cs[i] = Integer.TYPE;
}
else if (types[i].equals( "float") || types[i].equals( "Float")) {
cs[i] = Float.TYPE;
}
else if (types[i].equals("double") || types[i].equals("Double")) {
cs[i] = Double.TYPE;
}
else if (types[i].equals("boolean") || types[i].equals("Boolean")) {
cs[i] = Boolean.TYPE;
}
else {
cs[i] = String.class;
}
}
}
return cs;
}

/**
* »ñÈ¡²ÎÊýObject[]
*/
public Object[] getMethodParamObject( String[] types, String[] params) {

Object[] retObjects = new Object[params.length];

for (int i = 0; i < retObjects.length; i++) {
if(!params[i].trim().equals("")||params[i]!=null){
if(types[i].equals("int")||types[i].equals("Integer")){
retObjects[i]= new Integer(params[i]);
}
else if(types[i].equals("float")||types[i].equals("Float")){
retObjects[i]= new Float(params[i]);
}
else if(types[i].equals("double")||types[i].equals("Double")){
retObjects[i]= new Double(params[i]);
}
else if(types[i].equals("boolean")||types[i].equals("Boolean")){
retObjects[i]=new Boolean(params[i]);
}
else{
retObjects[i] = params[i];
}
}
}

return retObjects;
}
}

Òªµ÷ÓÃÒ»¸öÀàµÄ·½·¨£¬Ê×ÏÈÐèÒªÒ»¸ö¸ÃÀàµÄʵÀý£¨µ±È»£¬Èç¹û¸ÃÀàÊÇstatic£¬¾Í²»ÐèҪʵÀýÁË£¬ÖÁÓÚÔ­Òò£¬Äã¶®µÃ£¡£©¡£

1¡¢´´½¨Ò»¸öÀàµÄʵÀý

Ôڵõ½Ò»¸öÀàµÄClass¶ÔÏóÖ®ºó£¬ÎÒÃÇ¿ÉÒÔÀûÓÃÀàConstructorȥʵÀý»¯¸Ã¶ÔÏó¡£ConstructorÖ§³Ö·ºÐÍ£¬Ò²¾ÍÊÇËü±¾ÉíÓ¦¸ÃÊÇConstructor<T>¡£Õâ¸öÀàÓÐÒ»¸öpublic³ÉÔ±º¯Êý£ºT newInstance(Object... args),ÆäÖÐargsΪ¶ÔÓ¦µÄ²ÎÊý£¬ÎÒÃÇͨ¹ýConstructorµÄÕâ¸ö·½·¨À´´´½¨ÀàµÄ¶ÔÏóʵÀý¡£

ÔÚ´úÂëLoadMethod.javaºÍLoadMethodEx.javaÖУ¬·Ö±ð¸ø³öÁËÁ½ÖÖʵÀý»¯ClassÀàµÄ·½·¨£ºÒ»ÖÖÊÇÀûÓÃConstructorÀàµ÷ÓÃnewInstance()·½·¨£»ÁíÒ»ÖÖ¾ÍÊÇÀûÓÃClassÀà±¾ÉíµÄnewInstance()·½·¨´´½¨Ò»¸öʵÀý¡£Á½ÖÖ·½·¨ÊµÏÖµÄЧ¹ûÊÇÒ»ÑùµÄ¡£

// ÀûÓÃnewInstance()·½·¨£¬»ñÈ¡¹¹Ôì·½·¨µÄʵÀý
// ClassµÄnewInstance·½·¨£¬½öÌṩĬÈÏÎ޲εÄʵÀý»¯·½·¨£¬ÀàËÆÓÚÎ޲εĹ¹Ôì·½·¨
// ConstructorµÄnewInstance·½·¨£¬ÌṩÁË´ø²ÎÊýµÄʵÀý»¯·½·¨£¬ÀàËÆÓÚº¬²ÎµÄ¹¹Ôì·½·¨
Constructor ct = cls.getConstructor(null);
Object obj = ct.newInstance(null);
Object obj = cls.newInstance();

2¡¢ÐÐΪ

MethodÀàÖаüº¬×ÅÀàµÄ³ÉÔ±·½·¨µÄÐÅÏ¢¡£ÔÚMethodÀàÖÐÓÐÒ»¸öpublic³ÉÔ±º¯Êý£ºObject invoke(Object receiver, Object... args)£¬²ÎÊýreceiverÖ¸Ã÷Á˵÷ÓöÔÏ󣬲ÎÊýargsÖ¸Ã÷Á˸÷½·¨ËùÐèÒª½ÓÊյIJÎÊý¡£ÓÉÓÚÎÒÃÇÊÇÔÚÔËÐÐʱ¶¯Ì¬µÄµ÷ÓÃÀàµÄ·½·¨£¬ÎÞ·¨Ìáǰ֪µÀ¸ÃÀàµÄ²ÎÊýÀàÐͺͷµ»ØÖµÀàÐÍ£¬ËùÒÔ´«ÈëµÄ²ÎÊýµÄÀàÐÍÊÇObject£¬·µ»ØµÄÀàÐÍÒ²ÊÇObject¡££¨ÒòΪObjectÀàÊÇËùÓÐÆäËûÀàµÄ¸¸Àࣩ

Èç¹ûijһ¸ö·½·¨ÊÇJavaÀàµÄ¾²Ì¬·½·¨£¬ÄÇôObject receiver²ÎÊý¿ÉÒÔ´«Èënull£¬ÒòΪ¾²Ì¬·½·¨´Ó²»ÊôÓÚ¶ÔÏó¡£

3¡¢ÊôÐÔ

¶ÔÀàµÄ³ÉÔ±±äÁ¿½øÐжÁд£¬ÔÚFieldÀàÖÐÓÐÁ½¸öpublic·½·¨£º

Object get(Object object)£¬¸Ã·½·¨¿ÉÓÃÓÚ»ñȡij³ÉÔ±±äÁ¿µÄÖµ

Void set(Object object, Object value)£¬¸Ã·½·¨ÉèÖÃij³ÉÔ±±äÁ¿µÄÖµ

ÆäÖУ¬Object²ÎÊýÊÇÐèÒª´«ÈëµÄ¶ÔÏó£»Èç¹û³ÉÔ±±äÁ¿ÊǾ²Ì¬ÊôÐÔ£¬ÔÚobject¿É´«Èënull¡£

Áù¡¢¶ÔLoadMethod.javaµÄÓÅ»¯´¦Àí

ÔÚÉÏÒ»½ÚÖиø³öµÄLoadMethod.javaÖУ¬ÀàLoadMethod¶Ô¹Ì¶¨²ÎÊýÀàÐ͵ķ½·¨½øÐÐÁ˵÷Ó㬲¢ÇÒ²ÎÊýÀàÐÍÊÇͨ¹ýÒ»¸öString[]Êý×é´«È룬Ȼºó¾­¹ý·½·¨ getMethodTypesClass() ½âÎöÖ®ºó£¬²ÅµÃµ½Á˲ÎÊýµÄ¾ßÌåµÄÀàÐÍ¡£Í¬Ê±ÔÚgetMethodTypesClass()ºÍgetMethodParamObject()·½·¨ÖУ¬Í¨¹ý¶Ô´«ÈëµÄ×Ö·û´®²ÎÊý½øÐйýÂ˺ó£¬ÔÙ´¦ÀíÄÇЩ¿ÉÒÔÆ¥ÅäÖеIJÎÊýÀàÐÍ£¬ÆäËû²»ÄÜÆ¥ÅäµÄ²ÎÊý¶¼×öΪString¶ÔÏóÀ´´¦Àí¡£Èç¹ûÎÒÃǵ÷Óõķ½·¨ËùÐèÒªµÄ²ÎÊý²»ÊǼòµ¥ÀàÐ͵ıäÁ¿£¬¶øÊÇ×Ô¶¨ÒåµÄÀà¶ÔÏ󣬻òÕßListÁÐ±í£¬ÔÙÈç¹ûÎÒÃÇÖ»ÖªµÀÀàÃûºÍ·½·¨Ãû£¬²»ÖªµÀ·½·¨µÄ²ÎÊýÀàÐÍ£¬ÄÇÎÒÃǸÃÈçºÎ´¦ÀíÕâЩÇé¿öÄØ£¿

Òò´Ë£¬ÎÒ¶ÔLoadMethodÀà½øÐÐÁËÒ»¶¨µÄÓÅ»¯´¦Àí¡£Ïȸ½ÉÏ´úÂ룺

package crazypebble.reflectiontest;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class LoadMethodEx {
/**
* ÔÚÔËÐÐʱ¼ÓÔØÖ¸¶¨µÄÀ࣬²¢µ÷ÓÃÖ¸¶¨µÄ·½·¨
* @param cName JavaµÄÀàÃû
* @param MethodName ·½·¨Ãû
* @param params ·½·¨µÄ²ÎÊýÖµ
* @return
*/
public Object Load(String cName, String MethodName, Object[] params) {

Object retObject = null;

try {
// ¼ÓÔØÖ¸¶¨µÄÀà
Class cls = Class.forName(cName); // »ñÈ¡ClassÀàµÄ¶ÔÏóµÄ·½·¨Ö®¶þ

// ÀûÓÃnewInstance()·½·¨£¬»ñÈ¡¹¹Ôì·½·¨µÄʵÀý
// ClassµÄnewInstance·½·¨Ö»ÌṩĬÈÏÎ޲ι¹ÔìʵÀý
// ConstructorµÄnewInstance·½·¨Ìṩ´ø²ÎµÄ¹¹ÔìʵÀý
Constructor ct = cls.getConstructor(null);
Object obj = ct.newInstance(null);
//Object obj = cls.newInstance();
// ¸ù¾Ý·½·¨Ãû»ñȡָ¶¨·½·¨µÄ²ÎÊýÀàÐÍÁбí
Class paramTypes[] = this.getParamTypes(cls, MethodName);

// »ñȡָ¶¨·½·¨
Method meth = cls.getMethod(MethodName, paramTypes);
meth.setAccessible(true);

// µ÷ÓÃÖ¸¶¨µÄ·½·¨²¢»ñÈ¡·µ»ØÖµÎªObjectÀàÐÍ
retObject = meth.invoke(obj, params);

} catch (Exception e) {
System.err.println(e);
}

return retObject;
}

/**
* »ñÈ¡²ÎÊýÀàÐÍ£¬·µ»ØÖµ±£´æÔÚClass[]ÖÐ
*/
public Class[] getParamTypes (Class cls, String mName) {
Class[] cs = null;

/*
* Note: ÓÉÓÚÎÒÃÇÒ»°ãͨ¹ý·´Éä»úÖÆµ÷Óõķ½·¨£¬ÊÇ·Çpublic·½·¨
* ËùÒÔÔÚ´Ë´¦Ê¹ÓÃÁËgetDeclaredMethods()·½·¨
*/
Method[] mtd = cls.getDeclaredMethods();
for (int i = 0; i < mtd.length; i++) {
if (!mtd[i].getName().equals(mName)) { // ²»ÊÇÎÒÃÇÐèÒªµÄ²ÎÊý£¬Ôò½øÈëÏÂÒ»´ÎÑ­»·
continue;
}

cs = mtd[i].getParameterTypes();
}
return cs;
}
}

ÎÒÃÇͨ¹ýÇ°Ãæ¼¸½ÚµÄһϵÁзÖÎö£¬Ö»ÒªÎÒÃÇÖªµÀÁËÒ»¸öÀàµÄÀàÃû£¨°üÀ¨Æä°üµÄ·¾¶£©£¬ÄÇÎÒÃǾͿÉÒÔͨ¹ýClassÀàµÄһϵÁз½·¨£¬µÃµ½¸ÃÀàµÄ³ÉÔ±±äÁ¿¡¢¹¹Ôì·½·¨¡¢³ÉÔ±·½·¨¡¢ÒÔ¼°³ÉÔ±·½·¨µÄ²ÎÊýÀàÐͺͷµ»ØÀàÐÍ¡¢»¹ÓÐÐÞÊÎÓòµÈÐÅÏ¢¡£

Èç¹ûÎÒÃÇÒѾ­ÖªµÀij¸öÀàÃûºÍÐèÒª¶¯Ì¬µ÷Óõķ½·¨Ãû£¬ÔõÑù²ÅÄܲ»Óô«Èë·½·¨µÄ²ÎÊýÀàÐ;ͿÉÒÔµ÷Óø÷½·¨ÄØ£¿

ÔÚÒÑÖªÀàÃûµÄÇé¿öÏ£¬ÎÒÃÇ¿ÉÒÔ´òÓ¡Êä³ö¸ÃÀàµÄËùÓÐÐÅÏ¢£¬µ±È»°üÀ¨ÀàµÄ³ÉÔ±·½·¨£»È»ºóͨ¹ý¸ø¶¨µÄ·½·¨Ãû£¬¶Ô´òÓ¡Êä³öµÄ·½·¨Ãû½øÐÐɸѡ£¬ÕÒµ½ÎÒÃÇÐèÒªµÄ·½·¨£»ÔÙͨ¹ý¸Ã·½·¨µÄMethod¶ÔÏ󣬵õ½¸Ã·½·¨µÄ²ÎÊýÀàÐÍ¡¢²ÎÊýÊýÁ¿¡¢ºÍ·µ»ØÀàÐÍ¡£ÄÇôÎÒÃÇÔÚÍⲿ¶¯Ì¬µ÷Óø÷½·¨Ê±£¬¾Í²»ÐèÒª¹ØÐĸÃÀàÐèÒª´«ÈëµÄ²ÎÊýÀàÐÍÁË£¬Ö»ÐèÒª´«ÈëÀàÃû¡¢·½·¨Ãû¡¢²ÎÊýÖµµÄÐÅÏ¢¼´¿É¡£±ÊÕßʵÏÖÁËÒ»¸öÀàLoadMethodEx£¬ÏÈ´ÓÁ½¸öÀàµÄͬһ¸ö·½·¨ÐèÒªµÄ²ÎÊý·½Ãæ×öÒ»¸ö¶Ô±È£º

1¡¢LoadMethodExÀ࣬ÉÙÁËÒ»¸ö²ÎÊý£¨·½·¨²ÎÊýÀàÐÍÁÐ±í£©£¬±¾ÎÄÖ±½Ó´ÓÀàLoadMethodÄÚ²¿»ñÈ¡¸Ã²ÎÊýÀàÐÍÁÐ±í£¬²»ÐèÒªÓû§´«Èë¸ÃÐÅÏ¢£¬ºÃ´¦ÆäʵҲ²»ÑÔ¶øÓ÷ÁË¡£

2¡¢·½·¨µÄ²ÎÊýÖµ£ºÀàLoadMethodÊǽ«ËùÓеķ½·¨²ÎÊý¶¼×öΪһ¸öStringÀ´´«È룬ÔÚ´«ÈëÔÙ½øÐнâÎö£»¶ø±¾ÎÄÔòÖ±½ÓʹÓÃObjectÀàÐÍ×öΪ²ÎÊýÀàÐÍ£¬ÒòΪinvoke(Object obj, Object...args)·½·¨±¾ÉíËùÐèÒªµÄ²ÎÊýÀàÐ;ÍÊÇObject£¬±ÜÃâÁ˲»±ØÒªµÄ²ÎÊýÀàÐͱ任¡£

ÔÚµ÷ÓÃLoadMethodµÄLoad()·½·¨Ê±£¬Óû§Ö»ÐèÒªÖªµÀÀàÃû¡¢·½·¨Ãû£¬²¢ÇÒ½«ÒѾ­³õʼ»¯µÄ²ÎÊýÏÈÏòÉÏתÐÍΪObject£¬È»ºó´«µÝ¸øLoad()·½·¨¼´¿É¡£·½·¨µÄ·µ»ØÖµÎªObject£¬Õâ¸ö¿Ï¶¨ÊÇÓÉÓû§¸ù¾Ý×Ô¼ºµÄÐèÒª£¬ÔÙת»»³É×Ô¼ºËùÐèµÄÀàÐÍ¡£

public ÊôÐÔ
public class java.lang.Integer : bInteger = 4
public class java.lang.String : strB = crazypebble
public & ·Çpublic ÊôÐÔ
private int : bInt = 0
public class java.lang.Integer : bInteger = 4
public class java.lang.String : strB = crazypebble
private class java.lang.String : strA
¹¹Ôì·½·¨£º
public crazypebble.reflectiontest.ReflectionTest()
protected crazypebble.reflectiontest.ReflectionTest(int, java.lang.String)
¸¸Àà/½Ó¿Ú£º
¸¸Àà: java.lang.Object
½Ó¿Ú0: java.awt.event.ActionListener
½Ó¿Ú1: java.io.Serializable
³ÉÔ±·½·¨£º
public int abc(int, java.lang.String)
public void actionPerformed( java.awt.event.ActionEvent )
public final native void wait(long)
public final void wait()
public final void wait(long, int)
public boolean equals(java.lang.Object)
public java.lang.String toString()
public native int hashCode()
public final native java.lang.Class getClass()
public final native void notify()
public final native void notifyAll()
·´Éä»úÖÆµ÷Ó÷½·¨:LoadMethod
crazypebble ---> 1-hello, android-1!
·´Éä»úÖÆµ÷Ó÷½·¨:LoadMethodEx
crazypebble ---> 2-hello, android-2?
·µ»Ø½á¹û£º0

Æß¡¢×ܽá

¹ØÓÚ·´Éä»úÖÆ£¬Æäʵ»¹ÓÐÒ»¸ö±È½ÏÃô¸ÐµÄ»°Ì⣬¾ÍÊÇ·´Éä»úÖÆ´øÀ´ÎÒÃǵݲȫÐÔÎÊÌâ¡£ÓÉÓÚÎÒÔÚÕâ·½ÃæÑо¿µÄ²»ÊǺÜÉîÈ룬ËùÒÔ½²²»ºÃ¡£
³ÌÐòʵÏÖµÄÔ´Â룺

package crazypebble.androidreflection;
import java.lang.reflect.Field;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private static Button btnHandler = null;
private static Button btnShowing = null;
AlertDialog alertDialog = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

btnHandler = (Button)findViewById( R.id.btn_mHandler);
btnHandler.setOnClickListener(new ButtonListener());

btnShowing = (Button)findViewById( R.id.btn_mShowing);
btnShowing.setOnClickListener( new ButtonListener());

alertDialog = new AlertDialog.Builder(this)
.setTitle("abc")
.setMessage("Content")
.setIcon(R.drawable.icon)
.setPositiveButton("È·¶¨", new PositiveClickListener())
.setNegativeButton("È¡Ïû", new NegativeClickListener())
.create();
}

private class ButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_mHandler:
modify_mHandler();
alertDialog.show();
break;
case R.id.btn_mShowing:
alertDialog.show();
break;
default:
break;
}
}
}

private class PositiveClickListener implements android.content.DialogInterface .OnClickListener {
@Override
public void onClick( DialogInterface dialog, int which ) {
// ·½·¨¶þʱÆôÓÃ
modify_dismissDialog(false);
}
}

private class NegativeClickListener implements android.content.DialogInterface.OnClickListener {
@Override
public void onClick( DialogInterface dialog, int which ) {
// ·½·¨Ò»Ê±ÆôÓÃ
//dialog.dismiss();
// ·½·¨¶þʱÆôÓÃ
modify_dismissDialog(true);
}
}

/*
* µÚÒ»ÖÖ·½·¨£ºÐÞ¸ÄAlertControllerÀàµÄprivate³ÉÔ±±äÁ¿mHandlerµÄÖµ
*/
public void modify_mHandler() {
try {
Field field = alertDialog.getClass( ).getDeclaredField("mAlert");
field.setAccessible(true);
// »ñÈ¡mAlert±äÁ¿µÄÖµ
Object obj = field.get(alertDialog);
field = obj.getClass().getDeclaredField("mHandler");
field.setAccessible(true);
// ÐÞ¸ÄmHandler±äÁ¿µÄÖµ£¬Ê¹ÓÃеÄButtonHandlerÀà
field.set(obj, new MyButtonHandler(alertDialog));

} catch (Exception e) {
e.printStackTrace();
}
}

/*
* µÚ¶þÖÖ·½·¨£ºÐÞ¸ÄdismissDialog()·½·¨
*/
public void modify_dismissDialog(boolean flag) {
try {
Field field = alertDialog.getClass( ).getSuperclass( ).getDeclaredField("mShowing");
field.setAccessible(true);
// ½«mShowing±äÁ¿ÉèΪfalse£¬±íʾ¶Ô»°¿òÒѾ­¹Ø±Õ
field.set(alertDialog, flag);
alertDialog.dismiss();
} catch (Exception e) {
e.printStackTrace();
}
}
}

 

package crazypebble.androidreflection;
import java.lang.ref.WeakReference;
import android.content.DialogInterface;
import android.os.Handler;
import android.os.Message;
public class MyButtonHandler extends Handler{
// Button clicks have Message.what as the BUTTON{1,2,3} constant
private static final int MSG_DISMISS_DIALOG = 1;

private WeakReference<DialogInterface> mDialog;
public MyButtonHandler( DialogInterface dialog) {
mDialog = new WeakReference <DialogInterface>(dialog);
}
@Override
public void handleMessage( Message msg) {
switch (msg.what) {

case DialogInterface.BUTTON_POSITIVE:
case DialogInterface.BUTTON_NEGATIVE:
case DialogInterface.BUTTON_NEUTRAL:
((DialogInterface.OnClickListener) msg.obj).onClick(mDialog.get(), msg.what);
break;
}
}
}

¿´ÍêÉÏÃæÕâÆªÎÄÕÂÖ®ºó£¬Ï£Íû´ó¼ÒÃ÷È·Ò»µãµÄÊÇ£º·´Éä»úÖÆÍ¨¹ývoid setAccessible(boolean flag)·½·¨¿ÉÒԵõ½Ò»¸öÀàµÄprivateµÄ·½·¨ºÍÊôÐÔ£¬Ê¹ÓÃÕâЩprivateµÄ·½·¨ºÍÊôÐÔ£¬ÒѾ­¿ÉÒÔ×öһЩ³¬Ô½ÏÞÖÆµÄÊÂÇéÁË¡£ËùÒÔÔÚʹÓùý³Ì£¬»¹Ðè½÷É÷°¡£¡

 
   
3572 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
JavaÐéÄâ»ú¼Ü¹¹
JVM¡ª¡ªJavaÐéÄâ»ú¼Ü¹¹
JavaÈÝÆ÷Ïê½â
Java½ø½×--ÉîÈëÀí½âArrayListʵÏÖÔ­Àí
Java²¢·¢ÈÝÆ÷£¬µ×²ãÔ­ÀíÉîÈë·ÖÎö
×îпγÌ
java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
SpringBoot&Cloud¡¢JavaSSM¿ò¼Ü
Spring Boot Åàѵ
³É¹¦°¸Àý
¹úÄÚÖªÃûÒøÐÐ Spring+SpringBoot+Cloud+MVC
±±¾© Java±à³Ì»ù´¡ÓëÍøÒ³¿ª·¢»ù´¡
±±¾© Struts+Spring
»ªÏÄ»ù½ð ActiveMQ Ô­Àí
ijÃñº½¹« Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢