我有以下课程。
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
不理解 JDK 类-source
以外1.8
.
根据javac http://docs.oracle.com/javase/8/docs/technotes/tools/unix/javac.html#BHCIJIEG, javac
还是支持各种-source release
选项与以前的版本相同。
补充
我已经知道了JSR 310:日期和时间 API http://jcp.org/en/jsr/detail?id=310仅在 Java 8 中可用。这有什么关系javac
?
$ cat Java8.java
public class Java8 {
public void print(java.io.PrintStream out) {
out.printf("hello world\n");
}
}
$ 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 指出的。问题是该方法是default method
定义在接口中。javac
似乎抓住了这一点。
$ cat Java8i.java
public interface Java8i {
default void print(java.io.PrintStream out) {
out.printf("hello world\n");
}
}
$ 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
应该告诉我更有帮助。