前言
在Java 8之前的版本,程式碼編譯為class檔案後,方法參數的型別是固定的,但參數名稱卻遺失了,這和動態語言嚴重依賴參數名稱形成了鮮明對比。現在,Java 8開始在class檔案中保留參數名,為反射帶來了極大的便利。
範例:
public class GetRuntimeParameterName { public void createUser(String name, int age, int version) { // } public static void main(String[] args) throws Exception { for (Method m : GetRuntimeParameterName.class.getMethods()) { System.out.println("----------------------------------------"); System.out.println(" method: " + m.getName()); System.out.println(" return: " + m.getReturnType().getName()); for (Parameter p : m.getParameters()) { System.out.println("parameter: " + p.getType().getName() + ", " + p.getName()); } } } }
Method.getParameters為1.8新增方法,可以取得參數信息,包括參數名稱。
上述程式碼輸出的createUser參數如下:
method: createUser return: void parameter: java.lang.String, name parameter: int, age parameter: int, version
參數名稱被編譯進了class文件,取代了早期版本裡無意義的arg0、arg1…
對於許多依賴參數名稱的框架,可進一步簡化程式碼:
@Path("/groups/:groupid/:userid") public User getUser(String groupid, String userid) { ... }
沒有參數名的時代,得加上註解:
@Path("/groups/:groupid/:userid") public User getUser(@Param("groupid") String groupid, @Param("userid") String userid) { ... }
遺憾的是,保留參數名這一選項由編譯開關javac -parameters打開,預設是關閉的。
在Eclipse中,可以透過Compiler選項開啟:
注意:此功能必須把程式碼編譯成1.8版本的class才行。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或工作能帶來一定的幫助,如果有疑問大家可以留言交流。
更多Java 8中如何取得參數名稱的方法範例相關文章請關注PHP中文網!