Ответ
Да, создать такую коллекцию можно, но это считается плохой практикой из-за потери типобезопасности. Есть несколько технических способов:
1. Использование Collection<Object>:
List<Object> mixedList = new ArrayList<>();
mixedList.add("Text"); // String
mixedList.add(100); // Integer
mixedList.add(true); // Boolean
2. Использование сырого типа (Raw Type):
List list = new ArrayList(); // Предупреждение компилятора
list.add("Text");
list.add(100);
3. Использование коллекции с верхнеуровневым предком:
List<Number> numbers = new ArrayList<>();
numbers.add(10); // Integer
numbers.add(3.14); // Double
// Все элементы — подтипы Number
Главная проблема и решение:
При извлечении элементов обязательно нужна проверка типа (instanceof) и приведение:
for (Object obj : mixedList) {
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
} else if (obj instanceof Integer) {
Integer i = (Integer) obj;
System.out.println(i * 2);
}
}
Рекомендация: Вместо коллекций Object используйте:
- Дженерики с конкретным типом.
- Классы-обертки (DTO) для разнотипных данных.
- Паттерн «Посетитель» (Visitor) для обработки элементов разного типа в структуре данных.