当前位置: 首页 > 面试题库 >

java: (String[])List.toArray() gives ClassCastException

堵泽宇
2023-03-14
问题内容

以下代码(在android中运行)始终在第三行中给我ClassCastException:

final String[] v1 = i18nCategory.translation.get(id);
final ArrayList<String> v2 = new ArrayList<String>(Arrays.asList(v1));
String[] v3 = (String[])v2.toArray();

当v2为Object [0]以及其中包含字符串时,也会发生这种情况。知道为什么吗?


问题答案:

这是因为当您使用

 toArray() 

它返回一个Object [],该对象不能转换为String [](即使内容为String),这是因为toArray方法仅获得一个

List 

并不是

List<String>

因为泛型仅是源代码,在运行时不可用,因此无法确定要创建哪种类型的数组。

采用

toArray(new String[v2.size()]);

分配正确的数组类型(String []和正确的大小)



 类似资料:
  • 输出: [12, 34, 56, null, 32, 1] 不应该是: [12, 34, 56, null, null, null] 吗? 这是为什么? 版本:GraalVM for JDK 17

  • 在前面的 Java 字符串小节,我们就已经接触了 String 类,但并未提及 String 类相关的操作,现在有了面向对象相关前置知识,我们知道了类下面可以有相关的操作,作为 Java 语言的内置类,String 类也为我们预先定义了很多好用的方法,本小节我们将介绍 String 类的常用方法,并结合示例辅助理解。 1. String 对象的创建 String 对象的创建有两种方式。 第 1 种

  • 我做了与本文相同的测试:new String()vs literal String performance 谢谢你!

  • 本文向大家介绍关于List.ToArray()方法的效率测试,包括了关于List.ToArray()方法的效率测试的使用技巧和注意事项,需要的朋友参考一下 之前一直认为因为List内部实现是数组,ToArray的实现只是将数组返回出去而已。 今天测了一下发现并不是那样 1万数量大小的List,调用1万次ToArray的时间消耗是417ms左右。 报着疑惑看了下源码,没想到它是把内部数组复制了一份再

  • 问题内容: 我是学习Java的C ++人。我在读《有效的Java》,使我有些困惑。它说永远不要写这样的代码: 因为它创建了不必要的String对象。但是应该这样写: 到目前为止还可以…但是,考虑到此类: 为什么第一个陈述可以?不是吗 我如何使行为像这样,使上面的语句可以正常运行(带有和不带有)?字符串到底有什么用,它能够像这样传递文字就可以了吗?据我了解,Java中没有“复制构造函数”的概念吗?

  • 问题内容: 我目前正在以指导学生编程的方式教学生。我告诉他们,他们可以在Oracle代码约定中找到大多数约定。 在我的上一教程中,一个学生问: 要么 是按惯例写的还是有区别的。我以前从未看过第一个版本,因此,我非常确定第二个版本是一个约定。但是我没有消息来源。 您能给我一个明确说明惯例中的哪一个的来源(最好是来自oracle,例如我上面链接的页面)吗? 两个表达式的等价 我知道这两个表达式是等效的