Что здесь происходит?
Вот подпись Arrays.asList
:
public static <T> List<T> asList(T... a)
Первое наблюдение состоит в том, что T
должен быть ссылочным типом.Все параметры типа Java являются ссылочными типами.
Второе наблюдение заключается в том, что a
является параметром varargs.Это означает, что a
может быть выражен как один или несколько T
экземпляров ... ИЛИ T[]
.
К вашему примеру.Кажется, вы ожидаете, что следующее выражение выдаст список char
или Character
.
Arrays.asList(word.toCharArray())
Во-первых, List<char>
не является допустимым типом Java, поскольку char
не является ссылкойtype.
Во-вторых, List<Character>
не может быть получено, потому что это не разрешено подписью.Давай попробуем.Если T
равно Character
, то подстановка будет
public static List<Character> asList(Character... a)
, но Character
фактически означает Character[]
, а word.toCharArray()
дает char[]
.(И язык Java не будет преобразовывать char[]
в Character[]
.)
Фактически, на самом деле происходит то, что T
соответствует char[]
, и результат Arrays.asList
будетList<char[]>
.И объект, который вы получите, будет списком размером 1 с единственным элементом char[]
, который содержит все символы word
.