Это не вопрос, как это сделать. Речь идет о , почему так оно и есть.java массивы параметрических типов
Массивы в Java знают свой тип компонента во время выполнения, и из-за стирания типа мы не можем иметь объекты массива переменных общего типа. Допускаются типы массивов с использованием дженериков и проверяются на чтение/запись звука, единственной проблемой, по-видимому, являются выражения распределителя.
Обратите внимание, что компилятор Java также запрещает следующее:
Pong<Integer> lotsofpong [] = new Pong<Integer>[100];
... где Pong
просто любой старый параметрический класс. Здесь нет ничего неизвестного. Да, во время выполнения lotsofpong
будет просто массивом Pong
, но я не вижу причины, по которой компилятор не может запомнить параметр типа для целей компиляции. Ну, это на самом деле это помнит, потому что эти типы существуют во время компиляции, поэтому единственной проблемой является отказ предоставить распределителю во время компиляции определенный тип компонента, связанный с общим параметром.
Даже если параметр Pong
является переменной общего типа, которая также не должна иметь значения. Динамический массив все равно будет массивом Pong
, требуя для каждого элемента размер Pong
, который не зависит от его параметра типа.
Да, я знаю, что есть способы обойти это: либо использовать отливки (возможно, с SuppressWarning) из непараметрического типа, либо подкласс Pong<Integer>
с непараметрическим классом и вместо этого использовать этот тип. Но есть ли причина, почему такой распределитель не разрешен?
http://stackoverflow.com/questions/9542076/array-of-parameterized-types, http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation и http: //www.ibm.com/developerworks/java/library/j-jtp01255/index.html может представлять интерес. – jedwards
Эффективный элемент java 25. Я действительно не помню его, но вы можете попробовать эту ссылку [google books] (http://books.google.com/books?id=ka2VUBqHiWkC&pg=PA119&lpg=PA119&dq=effective+java+generic + массив и источник = бл & отс = yYIoOin1VY & сиг = OLgj07rc_1YGLtguS2E1slt2iDc & гл = еп & са = Х & е = Kw6jUZDUCbTV4ASajIGIAw & вед = 0CC4Q6AEwAA # v = OnePage & д = эффективная% 20java% 20generic% 20array & F = ложь) – zeller