JLS strictfp Interfaces указует, что:Поведения strictfp ключевого слова с реализацией/расширяет интерфейс/класса
Эффект модификатора strictfp, чтобы сделать все поплавок или двойные выражения в объявлении интерфейса быть явно FP-строгим (§ 15.4).
Это означает, что все вложенные типы, объявленные в интерфейсе, являются неявно strictfp.
Эффект модификатора strictfp, чтобы сделать все поплавок или двойные выражения в объявлении интерфейса быть явно FP-строгим (§15.4).
Это означает, что все методы, объявленные в интерфейсе, и все вложенные типы, объявленные в интерфейсе, являются неявно strictfp.
Из этих двух пунктов нет никаких указаний о поведении strictfp
при реализации/Расширение интерфейса/класса, объявленного с strictfp
модификатора.
После поиска я нашел хорошее объяснение использования strictfp
ключевого слова Use the strictfp modifier for floating-point calculation consistency across platforms, и это указывает, что:
Строгий поведение не наследуется подклассом, который простирается на FP-строгий суперкласса. Метод переопределения может независимо выбирать FP-строгий, если переопределенный метод не является, или наоборот.
Я проверил поведение strictfp
ключевого слова, расширяя класс, объявленный с strictfp
ключевого слова, и это верно: strictfp
поведение не наследуется классов, расширяющих класс, но проблема в том, при реализации интерфейса, объявленного с ключевым словом strictfp
, это неверно: поведение strictfp
не наследуется классами, реализующими интерфейс.
Может ли кто-нибудь объяснить мне правильное поведение strictfp
с внедрением/расширением интерфейса/класса, объявленного с помощью модификатора strictfp
?
«Я тестировал поведение ключевого слова strictfp при расширении класса, объявленного с помощью ключевого слова strictfp, и это правда: поведение strictfp не наследуется классами, расширяющими класс». Вопрос в том, как вы его протестировали? Я предполагаю, что это правда, поскольку (из официальных документов) весь класс не будет strictfp - только методы из интерфейса.В любом случае - как вы провели тест? –
Мне кажется, что эта часть неверна «Весь код в любом классе, который реализует интерфейс». Будет ли это наследование временем компиляции или временем загрузки? В других сценариях ключевое слово применяется строго в одном исходном файле '.java', и эффект содержится в одном или нескольких файлах продукта .class. –
@PiotrR Что я имею в виду при тестировании, так это то, что я выполнил несколько случайных примеров, которые охватывают несколько применений 'strictfp' с интерфейсом, методами, конструкторами и классами, а с помощью команды' javap -c' я смог исследовать содержимое сгенерированного кода и посмотреть, наследуется ли поведение 'strictfp' реализованными и расширенными классами. –