数组转换Java 8与Java 9 [英] array cast Java 8 vs Java 9

查看:132
本文介绍了数组转换Java 8与Java 9的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有人能够深入了解此代码在java 8上的工作原理,而不是java 9上的原因

Does anyone have insights on why this code works on java 8 but not on 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第274行)。所以我没有自由改变代码,我们正在运行java 9.有没有办法解决这个问题?这是java 9的一个问题(因为它似乎是一个突破性的变化)或只是在hive repo中提交了一个bug。

I understand we can specify the type while doing toArray instead of casting it. But I found this issue while debugging one of our dependency (hive-metastore-2.1.1 HiveMetaStoreClient line 274). So I don't have the liberty to change the code and we are running java 9. Is there a way to get around this? Is this a problem with java 9(since it seems like a breaking change) or just file a bug in the hive repo.

推荐答案

似乎可能是由于更改(col)Arrays.asList(x).toArray ()。getClass()应该是Object [] .class

看起来他们修复了toArray可以返​​回Object以外的类型的错误。

Looks like they fixed a bug that toArray could return types other than Object.

引用发行说明


这可能导致期望旧行为的代码失败使用 ClassCastException ...如果出现此问题,请重写代码以使用one-arg表单 toArray(T []),并提供所需数组类型的实例。这也将消除演员阵容的需要。

This may cause code that was expecting the old behavior to fail with a ClassCastException...If this problem occurs, rewrite the code to use the one-arg form toArray(T[]), and provide an instance of the desired array type. This will also eliminate the need for a cast.

因此,您似乎需要在Hive仓库中提交一个错误,以便在此更改后更新代码。

So it seems like you'll need to file a bug in the Hive repo to update the code to work after this change.

看起来他们实际上在未来的提交中添加了配置值,如果设置了某个值,实际上会避免导致问题的代码路径。
https://github.com/apache/hive/commit/07492e0d2f1942c1794a3190610e10207c850cf7 #diff-ca39aa4869cc58909a31c761cd7a27ccR257

Looks like they actually added a configuration value in a future commit which if set with a certain value would actually avoid the code path causing the issue. https://github.com/apache/hive/commit/07492e0d2f1942c1794a3190610e10207c850cf7#diff-ca39aa4869cc58909a31c761cd7a27ccR257

也许您可以升级到具有此功能的版本并使用此配置来避免此问题。只要您不关心需要该代码路径的功能。似乎导致问题的代码是选择随机使用哪个URI,而不是从列表中选择第一个。

Maybe you can upgrade to a version that has this and use this configuration to avoid the problem. So long as you don't care about the functionality that requires that code path. Seems like the code causing the problem is selecting which URI to use randomly instead of just picking the first one out of a list.

这篇关于数组转换Java 8与Java 9的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆