1.
Конкретный
в случае вызова метода через отражение
не распространяется на ту часть JLS, которую вы цитируете. Та часть, которую вы цитируете, о преобразовании типов , когда у вас есть значение типа, который вы передаете как другой тип. Здесь вы думаете о преобразовании логического значения в логическое значение.
Но преобразование типов означает что-то подобное:
Boolean b = true;
или
boolean b = true;
Boolean b2 = b;
Отражение не является механизмом, который применяет преобразование типов.
Когда по необходимости вызов рефлексивного метода оборачивает логическое возвращаемое значение в логический объект, он не включается в ту часть JLS, которую вы указали.
Это объясняет, почему JLS здесь не нарушается.
Относительно того, почему рефлексия в любом случае не согласуется с этим поведением:
Это потому, что в более старых версиях Java рефлексия существовала до обобщения. И дженерики - это причина, по которой автоматическая блокировка внезапно стала удобной, а автобокс - причина, по которой было разумно не дублировать «общие» значения упакованных примитивов.
Все это было определено после того, как рефлексия уже существовала некоторое время, и уже вела себя определенным образом. Это означает, что уже существовал код Java, который использовал отражение, и, скорее всего, существующий код, который неправильно полагался на существующее поведение. Изменение существующего поведения привело бы к поломке существующего кода, что было исключено.