欢迎您光临本小站。希望您在这里可以找到自己想要的信息。。。

JDK8新特性:编译器保留方法参数名字

java water 2912℃ 0评论

在JDK8之前,java编译器会忽略我们编写代码时候设定的参数名,比如在mybatis框架中,我们可以使用@Param注解来让mybatis知道参数名。

public interface DemoMapper {    
    List<Card> getCardList(@Param("cardIds") List<Integer> cardIds);    
    Card getCard(@Param("cardId")int cardId);
}


很长一段时间里,Java程序员一直在发明不同的方式使得方法参数的名字能保留在Java字节码中,并且能够在运行时获取它们(比如Paranamer类库)。最终,在Java 8中把这个强烈要求的功能添加到语言层面(通过反射API与Parameter.getName()方法)与字节码文件(通过新版的javac的–parameters选项)中。 

public class ParameterNames {    public static void main(String[] args) throws Exception {
        Method method = ParameterNames.class.getMethod( "main", String[].class );        
        for( final Parameter parameter: method.getParameters() ) {
	    System.out.println("isNamePresent: " + parameter.isNamePresent());
            System.out.println( "Parameter: " + parameter.getName() );
        }
    }
}


如果不使用–parameters参数来编译这个类,然后运行这个类,会得到下面的输出:

isNamePresent: falseParameter: arg0

如果使用–parameters参数来编译这个类,参数的真实名字将会显示出来:

isNamePresent: trueParameter: args


如果是maven项目,可以配置maven编译插件:

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<version>3.1</version>
	<configuration>
		<compilerArgument>-parameters</compilerArgument>
		<encoding>UTF-8</encoding>
		<source>1.8</source>
		<target>1.8</target>
	</configuration></plugin>

转载请注明:学时网 » JDK8新特性:编译器保留方法参数名字

喜欢 (1)or分享 (0)

您必须 登录 才能发表评论!