Изучая пункт 23 книги Effective Java 2nd Edition, я решил попытаться создать экземпляр объекта с помощью конструктора, который имеет необработанную коллекцию со списком аргументов смешанных объектов. Я предполагал, что компилятор обнаружит, что я пытаюсь передать необработанный тип конструктору. Однако компилятор выдает только предупреждение о непроверенном исключении «у вызывающего, а не у вызываемого».
Класс компилируется нормально, что еще раз подтверждает заявление Джоша Блоха не использовать необработанные типы в новом коде. Тот факт, что это компилируется, меня немного беспокоит.
В? Как можно обеспечить безопасность типов класса до создания экземпляра объекта, за исключением необходимости вручную проверять допустимость объекта в конструкторе? Следующее предоставило только предупреждение о непроверенном назначении от «вызывающего... в основном». Как можно защититься от этого.
public class RawType {
private final Collection<Example> example;
public RawType( Collection<Example> example ) {
this.example = example;
}
public Collection<Example> getExample() {
return example;
}
public static void main( String[] args ) {
Collection unsafe = new ArrayList();
unsafe.add( new Example() );
unsafe.add( new Corruption() );
unsafe.add( new Example() );
RawType rawType = new RawType( unsafe ); // Corruption
for(Object type : rawType.getExample()) {
System.out.println(type.getClass().getName()); // Mixed Classes...
}
}
static class Corruption {}
static class Example{}
}