Я использовал небольшой универсальный метод для создания множеств из vararg элементов, например
public <T> Set<T> createSet( T... elements ) { ...
Однако недавно я столкнулся с ситуацией, когда компилятор не сделал то, что я ожидал. Из следующих createSet() использует только s3 works.
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 - который был моим первоначальным кодированием? Спасибо.