java – JDK8 with -source 1.7 [默认方法]
发布时间:2020-12-14 05:24:57 所属栏目:Java 来源:网络整理
导读:我有以下课 public class ZonedDateTimeToInstant { public static void main(final String[] args) throws NoSuchMethodException { assert ChronoZonedDateTime.class.isAssignableFrom(ZonedDateTime.class); final Method toInstant = ChronoZonedDateTi
我有以下课
public class ZonedDateTimeToInstant { public static void main(final String[] args) throws NoSuchMethodException { assert ChronoZonedDateTime.class.isAssignableFrom(ZonedDateTime.class); final Method toInstant = ChronoZonedDateTime.class.getMethod("toInstant"); final ZonedDateTime now = ZonedDateTime.now(); final Instant instant = now.toInstant(); System.out.println(instant); } } 它只是编译罚款. & javac ZonedDateTimeToInstant.java 并且它与-source 1.7失败. & javac -source 1.7 ZonedDateTimeToInstant.java ZonedDateTimeToInstant.java:10: error: cannot find symbol final Instant instant = now.toInstant(); ^ symbol: method toInstant() location: variable now of type ZonedDateTime 1 error 1 warning 这是正常吗?看来javac不了解除1.8以外的-source的JDK类. 根据javac,javac仍然支持各种-source版本选项,就像以前的版本一样. 补充 我已经知道JSR 310: Date and Time API仅在Java 8中可用.与javac有什么关系? $cat Java8.java public class Java8 { public void print(java.io.PrintStream out) { out.printf("hello worldn"); } } $javac Java8.java $cat Java7.java public class Java7 { public static void main(final String[] args) { new Java8().print(System.out); } } $javac -source 1.7 -target 1.7 Java7.java warning: [options] bootstrap class path not set in conjunction with -source 1.7 1 warning $java Java7 hello world 结论 正如@ Eng.Fouad所说.问题是该方法是在接口中定义的默认方法. javac似乎抓住了这一点. $cat Java8i.java public interface Java8i { default void print(java.io.PrintStream out) { out.printf("hello worldn"); } } $javac Java8i.java $cat Java8c.java public class Java8c implements Java8i { } $javac Java8c.java $cat Java7i.java public class Java7i { public static void main(final String[] args) { new Java8c().print(System.out); } } $javac -source 1.7 -target 1.7 Java7i.java warning: [options] bootstrap class path not set in conjunction with -source 1.7 Java7i.java:3: error: cannot find symbol new Java8c().print(System.out); ^ symbol: method print(PrintStream) location: class Java8c 1 error 1 warning javac应该更有帮助地告诉我. 解决方法
这是在Java 8中引入的新的Time / Date API.这就是为什么它不能用Java 7编译.
toInstant()是一个默认方法,而-source 1.7不支持默认方法(Java 8的新功能). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |