Это не правильно. Прототипы:
boolean add(E e)
boolean contains(Object o)
boolean remove(Object o)
Если вы правильно используете интерфейс, вы никогда не сможете добавить не-E в список. Вы все еще можете вызывать содержит и удалить с не-E. Технически List может создавать исключение ClassCastException, но это помечено как необязательное, и я не знаю ни одного класса, который это делает. Вероятно, он просто вернет false, а список останется без изменений.