java jdk source_java – JDK8 with -source 1.7 [默认方法]

我有以下课

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 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所说.问题是该方法是在接口中定义的默认方法. 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应该更有帮助地告诉我.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值