有人知道为什么这段代码在Java 8上可以运行,但在Java 9上不能吗?
String[] strings = (String[]) Arrays.asList("foo", "bar").toArray();
for (String string : strings) {
System.out.println(string);
}
我知道我们可以在toArray时指定类型而不是强制转换它。但是我在调试依赖项(hive-metastore-2.1.1 HiveMetaStoreClient line 274)时发现了这个问题。所以我没有自由更改代码,我们正在运行java 9。有什么方法可以解决这个问题吗?这是java 9的问题(因为它似乎是一个破坏性的变化),还是只需在hive repo中报告错误。
toArray()
方法不带参数时返回的是Object[]
类型,因此将其强制转换为String[]
是不正确的。在 JDK 8 中代码“起作用”实际上是一个 bug。JDK 10 中对规范进行了澄清,请参阅 JDK-8160406。与此同时,获取字符串数组的最佳方法类似于以下示例:String[] strings = Arrays.asList("foo", "bar").toArray(new String[0])
。 - Stuart Marks