为什么隐式铸造不会发生在这里?

Car*_*cas 10 java arrays generics

我期待的数组转换charSet字符.

从逻辑上讲,如果我写出如何将数组转换为Java中的Set而不是使用内置函数,它将起作用.但是,使用带有泛型的内置函数则不然.

    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
Run Code Online (Sandbox Code Playgroud)

为什么不把它投射charcharacters

作为后续答案.(谢谢你顺便说一句)我想我的意思是一个简单的例子,为什么第一行隐含地投,但第二行没有?

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

我的理解是右手两方都做character[]变量

Kon*_*kov 12

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

char[] a = { 'a' };
Character[] b = { 'b' };
a = b; //doesn't work, because char[] is not a Character[]
Run Code Online (Sandbox Code Playgroud)

Character[] characterArray = {'s','t','r','i','n','g'};然而符合Collections.addAll(...),因为当该阵列被初始化时,每个值是从autoboxed charCharacter.