熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

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

2013-11-23 19:24:34  來源: Java核心技術 

  感謝引入varargs和autoboxingJava徹底的簡化了我們對反射的使用關於varargs的一個有趣的事是好像沒有平台通知我們說varargs現在是可用的當然有一些IDE在popup或其他的地方用Object表識取代了Object[]標識

     但是如果你沒有注意到的話那麼這對你是不公平的看看下面的代碼吧你就會知道我為什麼這麼說

package orgjavalobbytntvararg;

import javalangreflectMethod;

public class TestReflectionExample {

public static void main(String[] args) throws Exception {
  String s = Test String;
  preJava(s);
  postJava(s);
}

private static void preJava(String s) throws Exception {
  // First do a substring
  Class c = sgetClass();
  Method m = cgetMethod(substring new Class[] { intclass intclass });
  Object obj = minvoke(s new Object[] { new Integer() new Integer() });
  Systemoutprintln(obj);
  
  // Next do a length
  Method m = cgetMethod(length null);
  Integer lengthObj = (Integer)minvoke(s null);
  int length = lengthObjintValue();
  Systemoutprintln(length);
}

private static void postJava(String s) throws Exception {
  // First do a substring
  Class<?> c = sgetClass();
  Method m = cgetMethod(substring intclass intclass);
  Object obj = minvoke(s );
  Systemoutprintln(obj);

// Next do a length
  Method m = cgetMethod(length);
  int length = (Integer)minvoke(s);
  Systemoutprintln(length);
  
 }

}  

   上面的兩段代碼都做相同的事情但是通過使用varargs和autoboxing的力量方法的調用變得非常簡單例如

// Pre Java
Object obj = minvoke(s new Object[] { new Integer() new Integer() });
// Post Java Varargs + Autoboxing
Object obj = minvoke(s );

譯者加注varargs使得Pose Java 的代碼由數組類型的一個參數 如:

   new Object[] { new Integer() new Integer() }

簡化成了兩個參數new Integer()和new Integer()
而autoboxing使得new Integer()和new Integer()簡化成了  

下面是另外一個例子

// Pre Java
Method m = cgetMethod(length null);
Integer lengthObj = (Integer)minvoke(s null);
// Post Java Inferred varargs (no arguments) and autounboxing
Method m = cgetMethod(length);
int length = (Integer)minvoke(s);

譯者加注varargs使得Pose Java 的代碼由兩個必須的參數簡化成一個如從length null簡化成了length
而autoboxing使得(Integer)minvoke(s)的一個整型對象能直接賦值給一個int型的 變量length

運行結果
C:\java>java TestReflectionExample
Test

Test

From:http://tw.wingwit.com/Article/program/Java/hx/201311/26813.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.