我们应该为object.toArray()使用类型转换吗?

约翰娜:
String[] a = c.toArray(new String[0]);

第一:我需要在这里进行类型转换吗?(我认为我们应该像不使用类型转换(String[])c.toArray();那样编写,但我已经看到了c.toArray()。这是否有效?

第二:还有我们为什么写new String[0]

乔恩·斯基特(Jon Skeet):

通常仅在使用泛型Java时才需要类型转换。如果您查看文档,Collection.toArray(T[])将会发现它知道返回的数组的类型与传入的数组的类型相同。因此,您可以编写:

List<String> list = new ArrayList<String>();
list.add("Foo");
String[] array = list.toArray(new String[0]);

您传入数组以告诉集合所需的结果类型,该结果类型可能与集合中的类型不同。例如,如果您有一个a,则List<OutputStream>可能要将其转换为an Object[],a Stream[]ByteArrayOutputStream[]a-显然,只有在每个元素实际上都是 a时,后者才起作用ByteArrayOutputStream这也意味着,如果您已经具有正确类型和大小的数组,则可以将内容复制到该数组中,而不必创建新的数组。

顺便说一句,这个答案的先前版本是不准确的-如果您使用不带任何参数的重载,则总是会得到一个不能转换的重载Object[]

List<String> list = new ArrayList<String>();
list.add("Foo");

// toArray doesn't know the type of array to create
// due to type erasure
Object[] array = list.toArray();

// This cast will fail at execution time
String[] stringArray = (String[]) arrray;

编辑:我刚刚注意到erdemoo的答案中也提到了这一点,但是也可以在这里找到它:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我们应该为 Android 和 IOS 单独使用广告单元吗?

我们应该为非计算状态属性使用getter吗?

我们应该为亚当优化器做学习率衰减吗

我们应该为每个类别绘制roc曲线吗?

我们应该为Android L Material主题设计吗?

我们应该为每个动作类型创建一个Epic吗?在可观察到的

我们是否应该为绑定到ng-Blur或ng-foucs的函数添加返回类型?

为什么我们应该为字符串数据类型而不是其余的数据导入#include <string>?

我们应该使用HashSet吗?

我们应该为Rxjava3使用哪个rxjava3改造适配器

我们应该记住关闭吗?

我们到底需要使用类型转换吗?

我们什么时候应该为对象选择 lateinit ?将绑定设为非可选和 lateinit 是不好的做法吗?

我们应该为实用程序编写单元测试吗?还是只为引用它们的用例编写单元测试?

如果我们在程序中使用延迟,我们应该使用cron吗?

我们可以使用相同的 AWS S3 TransferManager 实例,还是应该为每个文件上传创建一个新实例?

我们是否应该为全局模块片段中被丢弃变量的初始值设定项声明所使用的被丢弃函数提供定义?

当需求明确时我们应该使用scrum吗

我们不应该使用<noscript>元素吗?

我们应该继续在AngularJS中使用表单吗?

我们应该使用机器范围的Wine前缀吗?

我们应该使用标准库中的异常类型吗?

我们如何创建一个我们应该实现的对象的“骨架类型”?

我们如何对AWS CDK代码进行单元测试?我们应该吗?

我们应该始终绑定我们的SQL语句吗?

我们应该使用序列还是身份作为我们的主键?

我们应该如何使用微服务构建我们的模型?

我们应该忽略.python-version文件吗?

我们应该遍历地图吗?为什么?