В родовом классе Class<T>
метод getConstructors()
имеет тип возврата с неизвестным общим вместо T
. Причиной этого является объяснение в javadoc.
Обратите внимание: хотя этот метод возвращает массив объектов
Constructor<T>
(это массив конструкторов из этого класса), возвращаемый тип этого методаConstructor<?>[]
, а неConstructor<T>[]
, как и следовало ожидать. Этот менее информативный тип возвращаемого значения необходим, поскольку после его возврата из этого метода массив может быть изменен для хранения объектов Constructor для разных классов, что нарушит гарантии типаConstructor<T>[]
.
Мой коллега и я попытались понять это объяснение. В нашем понимании они в основном говорят о том, что он имеет неизвестный общий тип, потому что некоторые вызывающие могут помещать в этот массив другие объекты Constructor
. Мы получили это право? И если да, то зачем кому-то проектировать API таким образом. Не лучше ли использовать конкретный тип и доверять программисту правильно использовать массив? Для нас это звучит немного как "Мы делаем худший API, потому что программист, использующий его, может попробовать что-то глупое". Где лежит наша ошибка?