Java StandardReflectionParameterNameDiscoveryr如何编译到jdk版本50?
我看到了org.springframework.core.StandardReflectionParameterNameDiscoveryr的字节码,它的版本是50。 但是它使用JDK1.8的方法:Java StandardReflectionParameterNameDiscoveryr如何编译到jdk版本50?,java,spring,spring-mvc,jvm,Java,Spring,Spring Mvc,Jvm,我看到了org.springframework.core.StandardReflectionParameterNameDiscoveryr的字节码,它的版本是50。 但是它使用JDK1.8的方法:java.lang.reflect.Parameter。它是如何编译的? 伟大的工程就是答案 Spring4.x引入了Java8兼容性,但没有破坏其代码与Java6和Java7的二进制兼容性。这意味着该框架是使用Java8javac编译的,但带有选项-source 1.6-target 1.6 这意
java.lang.reflect.Parameter
。它是如何编译的?
伟大的工程就是答案
Spring4.x引入了Java8兼容性,但没有破坏其代码与Java6和Java7的二进制兼容性。这意味着该框架是使用Java8javac
编译的,但带有选项-source 1.6-target 1.6
这意味着spring4.x不使用任何java8语言特性(如lambdas),但可以通过小心地保护它们的使用来使用java8sdk中引入的类
在org.springframework.core.StandardReflectionParameterNameDiscoveryer
的源代码中,您可以注意到注释@UsesJava8
,该注释仅在Java8或更高版本运行为Java6编译的代码时使用
要查看此操作,请注意使用此类的Spring框架代码,例如:
Spring4.x代码库中使用的Java 8API很少,比如可选的和流
private static final boolean standardReflectionAvailable =
(JdkVersion.getMajorJavaVersion() >= JdkVersion.JAVA_18);
public DefaultParameterNameDiscoverer() {
if (standardReflectionAvailable) {
addDiscoverer(new StandardReflectionParameterNameDiscoverer());
}
addDiscoverer(new LocalVariableTableParameterNameDiscoverer());
}