Preface
In versions before Java 8, after the code is compiled into a class file, the types of method parameters are fixed, but the parameter names are lost. This is in stark contrast to dynamic languages that rely heavily on parameter names. Compared. Now, Java 8 begins to retain parameter names in class files, which brings great convenience to reflection.
Example:
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 is a new method for 1.8, which can obtain parameter information, including parameter names.
The createUser parameters output by the above code are as follows:
method: createUser return: void parameter: java.lang.String, name parameter: int, age parameter: int, version
The parameter names are compiled into the class file, replacing the meaningless arg0, arg1...# in the earlier version.
##For many frameworks that rely on parameter names, the code can be further simplified:@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) { ... }