В этом случае я попаду прямо в проблему. Это метод, который я до сих пор:Как я могу построить массив параметризованного типа?
public T[] getAllValues() {
Serializable[] result = new Serializable[sets.size()];
for (int i = 0; i < sets.size(); i++) {
result[i] = sets.get(i).getValue();
}
return (T[]) result;
}
«Т» является параметризованным типом, который расширяет Сериализуемым. 'sets' - это ArrayList, содержащий тип String (key) и T (value), , поэтому getValue() возвращает T. . В этом методе я хочу вернуть все Ts в массив, поэтому что бы я на самом деле хотел бы сделать больше похож на это:
public T[] getAllValues() {
T[] result = new T[sets.size()];
for (int i = 0; i < sets.size(); i++) {
result[i] = sets.get(i).getValue();
}
return result;
}
так Сериализуемый массив, который разливается в массив T была только идея, как работы вокруг, но не работает, к сожалению. Но в то же время, я не могу использовать второй вариант, потому что
new T[int];
, очевидно, не представляется возможным построить, когда тип спараметрирован. Почему это? И что еще более важно: как я могу обойти это?
Спасибо заранее
EDIT: Я решил проблему, это то, что я придумал:
public T[] getAllValues(T[] typearray) {
for (int i = 0; (i < typearray.length) && (i < sets.size()); i++) {
typearray[i] = sets.get(i).getValue();
}
return typearray;
}
Вкратце: невозможно создать общие массивы. См. Http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation – Robin
Добро пожаловать в Java-генераторы. –
@Tom О вашем решении в редактировании: вам следует избегать использования входных аргументов для вывода. Это довольно запутанно для других разработчиков, или для будущего вас. Возвращение же массива также добавляет к путанице. – toto2