JAVA¤Ï®g¾÷¨î JAVA¤Ï®g¾÷¨î¬O¦b¹B¦æª¬ºA¤¤¡A¹ï©ó¥ô·N¤@ÓÃþ¡A³£¯à°÷ª¾¹D³oÓÃþªº©Ò¦³ÄݩʩM¤èªk¡F¹ï©ó¥ô·N¤@Ó¹ï¶H¡A³£¯à°÷½Õ¥Î¥¦ªº¥ô·N¤@Ó¤èªk¡F³oºØ°ÊºAÀò¨úªº¸ê°T¥H¤Î°ÊºA½Õ¥Î¹ï¶Hªº¤èªkªº¥\¯àºÙ¬°java»y¨¥ªº¤Ï®g¾÷¨î¡C Java¤Ï®g¾÷¨î¥Dn´£¨Ñ¤F¥H¤U¥\¯à¡G ¦b¹B¦æ®É§PÂ_¥ô·N¤@Ó¹ï¶H©ÒÄݪºÃþ¡F¦b¹B¦æ®Éºc³y¥ô·N¤@ÓÃþªº¹ï¶H¡F¦b¹B¦æ®É§PÂ_¥ô·N¤@ÓÃþ©Ò¨ã¦³ªº¦¨ûÅܼƩM¤èªk¡F¦b¹B¦æ®É½Õ¥Î¥ô·N¤@Ó¹ï¶Hªº¤èªk¡F¥Í¦¨°ÊºA¥N²z¡C 1. ±o¨ì¬YÓ¹ï¶HªºÄÝ©Ê
1 public Object getProperty(Object owner, String fieldName) throws Exception { 2 Class ownerClass = owner.getClass(); 3 4 Field field = ownerClass.getField(fieldName); 5 6 Object property = field.get(owner); 7 8 return property; 9 } Class ownerClass = owner.getClass()¡G±o¨ì¸Ó¹ï¶HªºClass¡C
Field field = ownerClass.getField(fieldName)¡G³q¹LClass±o¨ìÃþÁn©úªºÄݩʡC
Object property = field.get(owner)¡G³q¹L¹ï¶H±o¨ì¸ÓÄݩʪº¹ê¨Ò¡A¦pªG³oÓÄݩʬO«D¤½¦³ªº¡A³o¸Ì·|³øIllegalAccessException¡C
2. ±o¨ì¬YÓÃþªºÀRºAÄÝ©Ê
1 public Object getStaticProperty(String className, String fieldName) 2 throws Exception { 3 Class ownerClass = Class.forName(className); 4 5 Field field = ownerClass.getField(fieldName); 6 7 Object property = field.get(ownerClass); 8 9 return property; 10 }
Class ownerClass = Class.forName(className) ¡Gº¥ý±o¨ì³oÓÃþªºClass¡C
Field field = ownerClass.getField(fieldName)¡G©M¤W±¤@¼Ë¡A³q¹LClass±o¨ìÃþÁn©úªºÄݩʡC
Object property = field.get(ownerClass) ¡G³o¸Ì©M¤W±¦³¨Ç¤£¦P¡A¦]¬°¸ÓÄݩʬOÀRºAªº¡A©Ò¥Hª½±µ±qÃþªºClassùبú¡C
3. °õ¦æ¬Y¹ï¶Hªº¤èªk
1 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception { 2 3 Class ownerClass = owner.getClass(); 4 5 Class[] argsClass = new Class[args.length]; 6 7 for (int i = 0, j = args.length; i < j; i++) { 8 argsClass[i] = args[i].getClass(); 9 } 10 11 Method method = ownerClass.getMethod(methodName, argsClass); 12 13 return method.invoke(owner, args); 14 } Class owner_class = owner.getClass() ¡Gº¥ýÁÙ¬O¥²¶·±o¨ì³oÓ¹ï¶HªºClass¡C
5¡ã9¦æ¡G°t¸m°Ñ¼ÆªºClass¼Æ²Õ¡A§@¬°´M§äMethodªº±ø¥ó¡C
Method method = ownerClass.getMethod(methodName, argsClass)¡G³q¹LMethod¦W©M°Ñ¼ÆªºClass¼Æ²Õ±o¨ìn°õ¦æªºMethod¡C
method.invoke(owner, args)¡G°õ¦æ¸ÓMethod¡Ainvoke¤èªkªº°Ñ¼Æ¬O°õ¦æ³oÓ¤èªkªº¹ï¶H¡A©M°Ñ¼Æ¼Æ²Õ¡Cªð¦^ȬOObject¡A¤]¬J¬O¸Ó¤èªkªºªð¦^È¡C
4. °õ¦æ¬YÓÃþªºÀRºA¤èªk
1 public Object invokeStaticMethod(String className, String methodName, 2 Object[] args) throws Exception { 3 Class ownerClass = Class.forName(className); 4 5 Class[] argsClass = new Class[args.length]; 6 7 for (int i = 0, j = args.length; i < j; i++) { 8 argsClass[i] = args[i].getClass(); 9 } 10 11 Method method = ownerClass.getMethod(methodName, argsClass); 12 13 return method.invoke(null, args); 14 }
°ò¥»ªºì²z©M¹ê¨Ò3¬Û¦P¡A¤£¦PÂI¬O³Ì«á¤@¦æ¡Ainvokeªº¤@ӰѼƬOnull¡A¦]¬°³o¬OÀRºA¤èªk¡A¤£»ÝnɧU¹ê¨Ò¹B¦æ¡C
5. ·s«Ø¹ê¨Ò 1 2 public Object newInstance(String className, Object[] args) throws Exception { 3 Class newoneClass = Class.forName(className); 4 5 Class[] argsClass = new Class[args.length]; 6 7 for (int i = 0, j = args.length; i < j; i++) { 8 argsClass[i] = args[i].getClass(); 9 } 10 11 Constructor cons = newoneClass.getConstructor(argsClass); 12 13 return cons.newInstance(args); 14 15 }
³o¸Ì»¡ªº¤èªk¬O°õ¦æ±a°Ñ¼Æªººc³y¨ç¼Æ¨Ó·s«Ø¹ê¨Òªº¤èªk¡C¦pªG¤£»Ýn°Ñ¼Æ¡A¥i¥Hª½±µ¨Ï¥ÎnewoneClass.newInstance()¨Ó¹ê²{¡C
Class newoneClass = Class.forName(className)¡G²Ä¤@¨B¡A±o¨ìnºc³yªº¹ê¨ÒªºClass¡C
²Ä5¡ã²Ä9¦æ¡G±o¨ì°Ñ¼ÆªºClass¼Æ²Õ¡C
Constructor cons = newoneClass.getConstructor(argsClass)¡G±o¨ìºc³y¤l¡C
cons.newInstance(args)¡G·s«Ø¹ê¨Ò¡C
6. §PÂ_¬O§_¬°¬YÓÃþªº¹ê¨Ò
1 public boolean isInstance(Object obj, Class cls) { 2 return cls.isInstance(obj); 3 }
7. ±o¨ì¼Æ²Õ¤¤ªº¬YÓ¤¸¯À 1 public Object getByArray(Object array, int index) { 2 return Array.get(array,index); 3 }
|