После компиляции с Java 8 и сброса полученных файлов классов с помощью javap я вижу это, из которых я показываю только первые 2 элемента:
BootstrapMethods:
0: #174 invokestatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
#175 (Ljava/lang/Object;)Z
#179 invokestatic llllll/lallll.lambda$printPersons$0:(Lllllll/lallll;)Z
#180 (Lllllll/lallll;)Z
1: #174 invokestatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
#175 (Ljava/lang/Object;)Z
#191 invokestatic llllll/lallll.lambda$printPersons$1:(Lllllll/lallll;)Z
#180 (Lllllll/lallll;)Z
2: #174 invokestatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/inv
Могу ли я использовать ASM для просмотра инструкций в этих методах начальной загрузки и изменить, скажем, имена вызываемых методов с помощью приведенных выше инструкций invokestatic?
По-видимому, эти методы не являются частью обычных методов класса, и мне не удалось посетить их, используя стандартные методы классов и методов ASM.
Если не использовать ASM, можно ли найти и изменить эти инструкции с помощью другой среды манипулирования файлами байт-кода/класса Java?
Я читал документы стандартного формата файла класса для Java и не вижу прямого описания инструкций для методов начальной загрузки, хотя я вижу то, что я буду описывать как метаданные для методов начальной загрузки.
Благодарность,
-Дэйвид