2014-04-17 3 views
2

Я пытаюсь создать общий массив в java - в котором у меня возникают некоторые проблемы. Как я могу создать массив Tuples размером 6 и размером байта [] и Целое внутри?Создайте общий массив в java

Благодаря

private Tuple<byte[], Integer>[] alternativeImages1 = new Tuple<byte[], Integer>[6]; 

class Tuple<F, S> { 

    public final F first; 
    public final S second; 

    public Tuple(final F first, final S second) { 
     this.first = first; 
     this.second = second; 
    } 

    @Override 
    public boolean equals(final Object o) { 
     if (this == o) 
      return true; 
     if (o == null || getClass() != o.getClass()) 
      return false; 

     final Tuple tuple = (Tuple) o; 
     return this.first == tuple.first && this.second == tuple.second; 
    } 

    @Override 
    public int hashCode() { 
     int result = this.first != null ? first.hashCode() : 0; 
     result = 31 * result + (this.second != null ? second.hashCode() : 0); 
     return result; 
    } 
} 
+0

Вы не можете создавать массивы типов, которые принимают параметры типа; это ограничение массивов на Java. Этот вопрос задан раньше, например: [Массив общего списка] (http://stackoverflow.com/questions/7810074/array-of-generic-list) – Jesper

ответ

7

Ну вы можете использовать тип необработанный:

Tuple[] array = new Tuple[6]; 

Или вы можете сделать неконтролируемое преобразование:

Tuple<byte[], Integer>[] array = (Tuple<byte[], Integer>[])new Tuple[6]; 

// or just this because raw types let you do it 
Tuple<byte[], Integer>[] array = new Tuple[6]; 

Или вы можете использовать список вместо:

List<Tuple<byte[], Integer>> list = new ArrayList<Tuple<byte[], Integer>>(); 

Вместо этого я рекомендую использовать список.

Выбор между двумя первыми вариантами, я бы рекомендовал непроверенное преобразование, потому что оно предоставит вам проверки времени компиляции. Однако он не будет генерировать исключение ArrayStoreException, если вы добавите в него какой-то другой тип Tuple.

+0

, если вы можете использовать список фиксированных размеров, не требуя ограничений проверьте, буду ли я использовать список, который я думаю (особенно, если бы я мог удалить нулевые значения по умолчанию) – Biscuit128

+0

Ну, это правда. Список имеет несколько разных функций из массива. Можно, однако, расширить ArrayList и заставить его вести себя как массив. Я мог бы привести вам пример этого, если вы хотите, хотя я бы рекомендовал просто привыкнуть к использованию функций List. Как правило, это превосходно, и редко приходится использовать массив, за исключением низкоуровневой обработки (например, ввода-вывода) или структур данных, где важна фиксированная длина (например, хеш-таблица). – Radiodef

Смежные вопросы