前言
在Java 8之前的版本,代碼編譯為class文件后,方法參數(shù)的類型是固定的,但參數(shù)名稱卻丟失了,這和動(dòng)態(tài)語(yǔ)言嚴(yán)重依賴參數(shù)名稱形成了鮮明對(duì)比。現(xiàn)在,Java 8開始在class文件中保留參數(shù)名,給反射帶來(lái)了極大的便利。
示例:
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新增方法,可以獲取參數(shù)信息,包括參數(shù)名稱。
上述代碼輸出的createUser
參數(shù)如下:
method: createUser return: voidparameter: java.lang.String, nameparameter: int, ageparameter: int, version
參數(shù)名稱被編譯進(jìn)了class文件,替代了早期版本里無(wú)意義的arg0
、arg1
……
對(duì)于很多依賴參數(shù)名的框架,可進(jìn)一步簡(jiǎn)化代碼:
@Path("/groups/:groupid/:userid")public User getUser(String groupid, String userid) { ...}
沒(méi)有參數(shù)名的時(shí)代,得加上注解:
@Path("/groups/:groupid/:userid")public User getUser(@Param("groupid") String groupid, @Param("userid") String userid) { ...}
遺憾的是,保留參數(shù)名這一選項(xiàng)由編譯開關(guān)javac -parameters
打開,默認(rèn)是關(guān)閉的。
在Eclipse中,可以通過(guò)Compiler選項(xiàng)打開:
注意:此功能必須把代碼編譯成1.8版本的class才行。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
新聞熱點(diǎn)
疑難解答
圖片精選