Тут можно воспользоваться тем, что дженерики в Java появились не сразу и изначально интерфейс лист был без дженерика. И во имя обратной совместимости он доступен. Таким образом вы можете объявить список чисел, потом его записать в переменную с нетипизированным списком (или имеющуюся переменную скастовать). И в уже нетипизированный список компилятор позволит добавить что угодно.
Вот пример компилируемого и работающего кода:
import java.util.ArrayList;
import java.util.List;
public class MyClass {
public static void main(String args[]) {
List<Integer> list = new ArrayList<>();
List listO = list;
listO.add("test");
//или просто кастуем к нетипизированному списку
//((List) list).add("test");
System.out.println("list = " + list);
}
}
Выведет:
list = [test]