java - 为什么这里不进行隐式转换?

标签 java arrays generics

我希望将 char 数组转换为 Set 字符。

从逻辑上讲,如果我写出类似 How to convert an Array to a Set in Java 的内容而不是使用它会工作的内置功能。但是,将内置函数与泛型一起使用则不会。

    TreeSet<Character> characterSet = Sets.newTreeSet();

    String myString = "string";
    Character [] characterArray = {'s','t','r','i','n','g'};


    Collections.addAll(characterSet,characterArray); // This works
    Collections.addAll(characterSet,myString.toCharArray()); // This Does not

为什么它不将 char 数组转换为 characters

作为对答案的跟进。 (顺便说一句,谢谢)我认为我的意思的一个简单示例是为什么第一行隐式转换但第二行不转换?

    Character [] characterArray  = {'s','t','r','i','n','g'}; // works
    Character [] characterArray2 = myString.toCharArray(); // does not work

我的理解是右手边都使character[]变量

最佳答案

因为 myString.toCharArray() 将返回 char[] 而不是 Character[]。您可以通过这个简单的测试来验证它:

char[] a = { 'a' };
Character[] b = { 'b' };
a = b; //doesn't work, because char[] is not a Character[]

不过 Character[] characterArray = {'s','t','r','i','n','g'}; 符合 Collections .addAll(...),因为在初始化数组时,每个值都会从 char 自动装箱到 Character

关于java - 为什么这里不进行隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29796517/

相关文章:

java - 在 Talend 中使用 tFileInputExcel 获取特定列

java - spring如何使用多个数据库?

java - 通过 OnClickListener 存储到 Java 数组中

将数组整数值与移位值进行比较

generics - 具有多种类型的边界

Java 有没有办法初始化类型安全的通用数组?

java - 正则表达式 java : how to replace a string in a generic between the start tag and end tag of a generic

java - 表数据模型更改后 JTable cellEditor 保留

arrays - 将整数数组分解为具有精确和的最大子数组数

java - 接口(interface)和具体类中的类型参数泛型