国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用Java5特性來簡化反射編程

2019-11-18 15:35:43
字體:
來源:轉載
供稿:網友

     感謝引入var-args和auto-boxing,java5徹底的簡化了我們對反射的使用。關于var-args的一個有趣的事是:似乎沒有平臺通知我們說,var-args現在是可用的。當然,有一些IDE在pop-up或其他的地方用Object...表識取代了Object[]標識。

     但是假如你沒有注重到的話,那么這對你是不公平的。看看下面的代碼吧,你就會知道我為什么這么說。

package org.javalobby.tnt.vararg;

import java.lang.reflect.Method;

public class TestReflectionExample {

public static void main(String[] args) throws Exception {
  String s = "Test String";
  PReJava5(s);
  postJava5(s);
}

private static void preJava5(String s) throws Exception {
  // First, do a substring
  Class c = s.getClass();
  Method m = c.getMethod("substring", new Class[] { int.class, int.class });
  Object obj = m.invoke(s, new Object[] { new Integer(0), new Integer(4) });
  System.out.println(obj);
  
  // Next, do a 'length'
  Method m2 = c.getMethod("length", null);
  Integer lengthObj = (Integer)m2.invoke(s, null);
  int length = lengthObj.intValue();
  System.out.println(length);
}

private static void postJava5(String s) throws Exception {
  // First, do a substring
  Class<?> c = s.getClass();
  Method m = c.getMethod("substring", int.class, int.class);
  Object obj = m.invoke(s, 0, 4);
  System.out.println(obj);

// Next, do a 'length'
  Method m2 = c.getMethod("length");
  int length = (Integer)m2.invoke(s);
  System.out.println(length);
  
 }

}  

   上面的兩段代碼都做相同的事情,但是通過使用var-args和auto-boxing的力量,方法的調用變得非常簡單。例如:

// Pre Java 5
Object obj = m.invoke(s, new Object[] { new Integer(0), new Integer(4) });
// Post Java 5 - Var-args + Autoboxing.
Object obj = m.invoke(s, 0, 4);

譯者加注:var-args使得Pose Java 5的代碼由數組類型的一個參數, 如:

   new Object[] { new Integer(0), new Integer(4) }

簡化成了兩個參數,new Integer(0)和new Integer(4) ;
而auto-boxing使得new Integer(0)和new Integer(4)簡化成了0和4。  

下面是另外一個例子:

// Pre Java-5
Method m2 = c.getMethod("length", null);
Integer lengthObj = (Integer)m2.invoke(s, null);
// Post Java-5. Inferred var-args (no arguments) and auto-unboxing.
Method m2 = c.getMethod("length");
int length = (Integer)m2.invoke(s);

譯者加注:var-args使得Pose Java 5的代碼由兩個必須的參數,簡化成一個,如從"length", null簡化成了"length";
而auto-boxing使得(Integer)m2.invoke(s)的一個整型對象能直接賦值給一個int型的 變量,length 。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博罗县| 天镇县| 四会市| 苗栗县| 临沭县| 高台县| 辉县市| 佛山市| 勐海县| 准格尔旗| 原阳县| 花莲市| 玉环县| 五莲县| 吉木萨尔县| 平昌县| 东乡族自治县| 汾阳市| 武定县| 新源县| 乐昌市| 花莲市| 秦安县| 嫩江县| 寿光市| 五河县| 怀远县| 同心县| 芮城县| 苗栗市| 闽侯县| 酒泉市| 永川市| 平舆县| 巍山| 沙河市| 临海市| 施甸县| 凌云县| 旌德县| 准格尔旗|