Java 8中获取参数名称
生活随笔
收集整理的這篇文章主要介紹了
Java 8中获取参数名称
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文轉自廖雪峰老師的:《在Java 8中獲取參數名稱》
在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: createUserreturn: 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中获取参数名称的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程中 start()和run()方
- 下一篇: Java 多线程 —— 死锁与锁的错误用