У меня есть python 2.73 и windows 7. Решение, которое сработало для меня, было:
C:\programs\mingw\bin;
C:\Python27\Lib\distutils\distutils.cfg
, содержащий: [build]
compiler=mingw32
Чтобы иметь дело с MinGW, который больше не распознает флаг -mno-cygwin, удалите флаг в C: \ Python27 \ Lib \ distutils \ cygwincompiler.py с 322 по 326, поэтому он выглядит так:
self.set_executables(compiler='gcc -O -Wall',
compiler_so='gcc -mdll -O -Wall',
compiler_cxx='g++ -O -Wall',
linker_exe='gcc',
linker_so='%s %s %s'
% (self.linker_dll, shared_option,
entry_point))
Вам нужно передать массив, поэтому его тип выполнения можно использовать как подсказку toArray
. Вместо этого попробуйте toArray(new String[0])
. Вы также можете передать массив предварительно заданного размера.
Чтобы понять, подумайте, какое стирание стилей нужно будет сделать, чтобы
new T[4]
работал. Если Java допускает, что лучшее, что может сделать post erasure, это
new Object[4]
. Большинство реализаций toArray
используют java.lang.reflect.Array
для построения выходного массива правильного типа с учетом тип подсказки, переданный как Class
.
Обходным путем будет использование:
List<String> list = new ArrayList<>();
list.add("Sputnik");
list.add("Explorer");
//String[] str = list.toArray();
Это связано с тем, что он бросает несовместимые типы: Object [] не может быть преобразован в String [] error
Instead use:
String[] str = list.toArray(new String[0]);
or
String[] str = list.toArray(new String[list.size()]);
Чтобы понять, почему это происходит, просто посмотрите на javadoc для Collection.toArray()
, а затем посмотрите на метод Collection.toArray(T[] a)
. Также имейте в виду, что дженерики в Java стираются во время выполнения.
Поскольку массивы были в Java с самого начала, в то время как generics были введены только в Java 5. И метод List.toArray()
был введен в Java 1.2 до того, как появились дженерики, и поэтому было указано, что он возвращает Object[]
. Многие существующие коды теперь ожидают, что List.toArray()
вернет Object[]
, поэтому его теперь нельзя изменить.
Кроме того, генераторы стираются во время выполнения, поэтому ArrayList
не может даже построить массив нужного типа, если он захочет.
Лазейкой для этого является метод List.toArray(T[])
, который вернет вам массив правильного типа, если вы дадите ему массив правильного типа, чтобы он знал, какой тип использовать.
Причины два:
List
построено без Class<T>
, нет возможности для реализации построить массив типа T
.