2016-01-17 4 views
3

Я googled вокруг, и я не мог понять, как это сделать. Я пытаюсь добавить элементы в список вроде этого: List<?>. Мой код выглядит примерно так:Java | Добавление элементов в список <?>

public class Test { 
    private List<?> list; 

    public Test(List<?> useThisList) { 
     this.list = useThisList; 
    } 

    public void add(Object add) { 
     this.list.add(add); // this won't compile 
    } 
} 

Однако, как прокомментировал, этот код не будет компилироваться. Я попытался изменить его на что-то вроде:

public void add(? add) { 
    this.list.add(add); 
} 

Но это не скомпилируется по более очевидным причинам. Кто-нибудь знает, что мне нужно, чтобы изменить это, чтобы он функционировал правильно? Заранее спасибо!

Кстати, когда он делает работу, вы должны быть в состоянии сделать это:

List<String> list = new ArrayList<String>(); 
new Test(list).add("hello"); 
+2

Ну, если вы не знаете список, который у вас есть, откуда вы знаете, что можете добавить 'add' к нему? Возможно, ваш класс 'Test' должен быть общим ... –

+0

Я бы посоветовал вам прочитать эффективное java 2nd edition Джошуа Блохсом и обратиться к вопросу о дженериках. Это дает представление о том, как эффективно использовать дженерики/дикие животные –

ответ

5

Сделайте свой Test класс родового

public class Test<E> { 
    private List<E> list; 

    public Test(List<E> useThisList) { 
     this.list = useThisList; 
    } 

    public void add(E add) { 
     this.list.add(add); // this will compile 
    } 
} 

Инстанцировать тестовый класс, как это

Test<String> t = new Test<String>(new ArrayList<String>()); 
t.add("Something"); 
Смежные вопросы