2016-10-16 6 views
1

Я копал через байт-код выражения lambda выражения Java как скомпилированный моим компилятором OpenJDK, и мне интересно, может ли байт-код выражения лямбда варьироваться в зависимости от компилятора/времени выполнения? Я хотел бы знать, что моя инспекционная логика будет работать на разных платформах или нет.Java 8 lambda expression bytecode consistency

+2

Что именно вы пытаетесь проверить? Обратите внимание, в частности, что если компилятор Groovy 3 выходит из-под земли, поддерживая Java-8-стильные лямбды, он, вероятно, испустит * значительно * другой байт-код. – chrylis

+0

javac openjdk - не единственный java-компилятор, ecj - обычно используемая альтернатива, например. – the8472

ответ

4

Может ли байт-код выражения лямбда варьироваться в зависимости от компилятора/времени выполнения?

В теории да. JLS НЕ указывает, что должны быть созданы конкретные байт-коды/последовательности.

Вам нужно будет проверить байт-коды, испускаемые существующими Java 8 & Java 9 компиляторами, чтобы узнать, насколько они отличаются. (И это не говорит о компиляторах/версиях, которые еще не написаны!)

Я хотел бы знать, что моя инспекционная логика будет работать на разных платформах или нет.

Решение должно заключаться в создании комплексного набора тестовых примеров и их запусках против кода, созданного всеми компиляторами Java, которые вы хотите поддерживать.

Вкратце: протестируйте его.