Я использую небольшой общий метод для создания наборов из vararg элементов, например
public <T> Set<T> createSet( T... elements ) { ...
В последнее время, однако, я столкнулся с ситуацией, когда компилятор не делал того, что я ожидал от него. Из следующего createSet() использует только s3 работает.
Set<Class<? extends Throwable>> s1 = createSet( Exception.class, RuntimeException.class );
Set<? extends Class<Throwable>> s2 = createSet( Exception.class, RuntimeException.class );
Set<? extends Class<? extends Throwable>> s3 = createSet( Exception.class, RuntimeException.class );
Может ли кто-нибудь дать ясное объяснение того, почему s3 работает и что может быть неправильным с моим мнением о s1 - что было моим первоначальным кодированием? Спасибо.