Class AsmQuery<ENV>

  • Type Parameters:
    ENV - Окружение передаваемое в лямбду
    All Implemented Interfaces:
    Query<ENV>

    public class AsmQuery<ENV>
    extends Object
    implements Query<ENV>
    Сериализация Java лямбды.

    Это клас по сути является абстрактным, и для реализации конечной функциональности требуется переопределить метод call(Fn, SerializedLambda, MethodDef)

    Данный класс по сути выполняет следующие функции

    1. Метода apply(Fn) - получает байт код fn
    2. Полученный байт код передает в call(Fn, SerializedLambda, MethodDef)
     AtomicReference<MethodDef> mdefRef = new AtomicReference<>();
     var res =
       new AsmQuery<IEnv>(){
           @Override
           protected  RES call(Fn<IEnv, RES> fn, SerializedLambda sl, MethodDef mdef){
               // Сохранение представления байт кода
               mdefRef.set(mdef);
               return super.call(fn, sl, mdef);
           }
       }.apply(
           env0 -> env0.getUsers().filter(u -> u.getName().contains("Petrov"))
       );
     
    See Also:
    MethodDump, MethodDef
    • Field Detail

      • fn2mdef

        protected Map<Fn<ENV,​? extends Object>,​MethodDef> fn2mdef
        Кэш серилизованных лямбд - байт-код
      • methods

        protected Map<String,​MethodDef> methods
        Кэш сериализованых лямбд - байт-код
    • Constructor Detail

      • AsmQuery

        public AsmQuery()
    • Method Detail

      • apply

        public <RES> RES apply​(Fn<ENV,​RES> fn)
        Сериализация и вызов лямбды
        Specified by:
        apply in interface Query<ENV>
        Type Parameters:
        RES - результат вызова
        Parameters:
        fn - лямбда
        Returns:
        результат вызова
      • call

        protected <RES> RES call​(Fn<ENV,​RES> fn,
                                 SerializedLambda sl,
                                 MethodDef mdef)
        Реализация вызова лямбды
        Type Parameters:
        RES - результат вызова
        Parameters:
        fn - лямбда
        sl - лямбда - сериализация
        mdef - байт-код лямбды
        Returns:
        результат вызова
      • idOf

        protected String idOf​(SerializedLambda sl)
        Идентификатор в кеше для лямбды
        Parameters:
        sl - лямбда
        Returns:
        идентификатор