Мне нужно использовать generics для моего nestList
. Какой синтаксис я могу использовать, чтобы как Integer
и String
списки могли быть добавлены во вложенные списки, а также из любых других типов?
// integer list
List<Integer> listInteger = new ArrayList<Integer>(Arrays.asList(1, 2));
// string list
List<String> listString = new ArrayList<String>(Arrays.asList("abc", "xyz"));
// nested lists.
List nestedList = new ArrayList();
nestedList.add(listInteger);
nestedList.add(listString);
nestedList.add("A");
Внесите тип как Объект, когда вы добавляете в NestedList различные типы объектов (list, String).
List<Object> nestedList = new ArrayList<Object>();
Вы также можете использовать тип как Список только в том случае, если вы добавляете объекты списка в nestedList.
List<List> nestedList = new ArrayList<List>();
Но это приведет к ошибке, если вы попытаетесь добавить nestedList.add("A"), а также предложит предупреждение для использования необработанных типов.
Поскольку вы хотите хранить списки и объекты, не связанные с коллекцией ("A"), вы должны хранить объекты в своей коллекции, например:
import java.util.*;
public class Main {
public static void main(String[] args)
{
// integer list
List<Integer> listInteger = new ArrayList<Integer>(Arrays.asList(1, 2));
// string list
List<String> listString = new ArrayList<String>(Arrays.asList("abc", "xyz"));
// nested lists.
List<Object> nestedList = new ArrayList<Object>();
nestedList.add(listInteger);
nestedList.add(listString);
nestedList.add("A");
}
}
Просто обратите внимание, что List<Object>
заключается в том, чтобы избежать компилятора из жалобы на то, что ваша коллекция не имеет типа. Эффективно, List<Object>
и List
- это одно и то же.
Вы могли бы подавить предупреждение, используя это:
import java.util.*;
public class Main {
@SuppressWarnings({"rawtypes", "unchecked"})
public static void main(String[] args)
{
// integer list
List<Integer> listInteger = new ArrayList<Integer>(Arrays.asList(1, 2));
// string list
List<String> listString = new ArrayList<String>(Arrays.asList("abc", "xyz"));
// nested lists.
List nestedList = new ArrayList();
nestedList.add(listInteger);
nestedList.add(listString);
nestedList.add("A");
}
}
Но в конечном итоге решение в целом не очень хорошо. У меня нет всех ваших требований, но лучше было бы иметь объект для хранения всех ваших коллекций и объектов. Вы будете чище и свободны от @SuppressWarnings, которые считаются плохими.
Что-то вроде:
MyObj myobj = new MyObj();
nestedList.setIntegers(listInteger);
nestedList.setStrings(listString);
nestedList.setSomeProperty("A");
Создание этого List<Object> = new ArrayList<>();
позволит вам добавлять любые типы объектов независимо от их типа.
Просто измените эту строку
List<List> nestedList = new ArrayList<List>();
И это потому, что вы сохраняете список в списках, тип - List :)
List<List<?>>
.
Object
.