Общий метод для списка String и списка String [] в Java или списка T и списка T [] - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь написать общий метод для печати:

  1. Список элементов, такой как список целых чисел, строк и т. Д.
  2. Список T [], такой какList<String[]>, List<Integer[]> и т. Д.

У меня есть два следующих метода:

public static <T> void printList(List<T> list){
    for(T n : list) {
        System.out.print("[" + n + "]");
    }
}
public static <T> void printList(List<T[]> list){
    for(T[] arr: list) {
        for(T n : arr){
            System.out.print("[" + n + "]");
        }
    }
}

Я получил ошибку компиляции:

public static <T> void printList(List<T[]> list){
 where T#1,T#2 are type-variables:
 T#1 extends Object declared in method <T#1>printList(List<T#1[]>)
 T#2 extends Object declared in method <T#2>printList(List<T#2>)

Есть ли способ, которым я могу иметьметод printList для List<T> и List<T[]>?

1 Ответ

2 голосов
/ 05 марта 2019

Во время выполнения ваши List<T> и List<T[]> точно такие же, так как универсальный тип был удален компилятором. Поэтому оба метода имеют одну и ту же сигнатуру, а у вас ошибка компиляции. Чтобы это исправить, просто дайте другое имя одному из методов.

Подробнее о концепции стирания Что такое концепция стирания в дженериках в Java? , Спецификация Java

...