Lombok 使用教程-@Helper | 让你可以在方法内部中写方法

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

一、实验性功能说明

lombok v1.16.6中,@Helper作为一个实验性功能被引入。

实验因为:

  • 具有通用函数类型的lambda提供了一种替代策略。
  • 也许有一种方法可以使辅助方法的模板更少,从而使这个功能变得过时。

当前状态:未知–我们对这一功能没有足够的经验,无法对其未来做出预测。

二、简介

这个注解让你把方法放在方法中。你可能不知道,但是你可以在方法中声明类,并且这个类中的方法可以访问任何在声明前定义和设置的(有效的)最终局部变量或参数。不幸的是,要真正调用任何方法,你必须先建立一个这个方法局部类的实例,但这就是@Helper的作用,它可以帮助你解决这个问题! 用@Helper来注解一个方法局部类,就好像该帮助类中的所有方法都是你可以直接调用的方法,就像java允许方法存在于方法内部一样。

通常情况下,你必须声明你的帮助器的实例,例如:HelperClass h = new HelperClass(); 在声明了你的助手类之后,直接调用你的助手类中的方法,用h.helperMethod(); 。有了@Helper,这两件事就不再需要了。你不需要浪费一行代码来声明一个助手的实例,也不需要在所有对助手方法的调用前加上nameOfHelperInstance

三、示例比较

1. Lombok 写法

    
    import lombok.experimental.Helper;
    
    public class HelperExample {
      int someMethod(int arg1) {
        int localVar = 5;
    
        @Helper class Helpers {
          int helperMethod(int arg) {
            return arg + localVar;
          }
        }
    
        return helperMethod(10);
      }
    }

2. Java 标准写法

    
    public class HelperExample {
      int someMethod(int arg1) {
        int localVar = 5;
    
        class Helpers {
          int helperMethod(int arg) {
            return arg + localVar;
          }
        }
        Helpers $Helpers = new Helpers();
    
        return $Helpers.helperMethod(10);
      }
    }

四、支持的配置项

lombok.helper.flagUsage = [warning | error] (默认: not set)
Lombok@Helper的任何使用标记为警告或错误(如果已配置)。

五、附属说明

@Helper要求辅助类有一个无args的构造函数。如果不是这样的话,将会产生一个编译器错误。

目前,你的辅助类的实例在引擎下被称为$Foo,其中Foo是你的辅助类的名字。我们将来可能会改变这一点;请不要依赖这个变量的存在。我们甚至可能在以后用一个兄弟姐妹的方法来代替它。

请不要指望 this在辅助方法的代码中会有任何意义。你可以通过使用语法NameOfMyClass.this来引用真正的“this”。

在代码中,任何存在于辅助类方法声明下面的、与辅助类中任何方法同名的未限定的方法调用都被认为是对辅助类的调用。如果参数最终不兼容,你会得到一个编译器错误。

除非你使用的是JDK8或更高版本(它引入了 "effectively final"的概念),否则如果你想在方法的局部类中引用局部变量和参数,你必须将它们声明为final变量。这是java的限制,不是lombok@Helper特有的东西。

参考文献

【1】@Helper | With a little help from my friends… Helper methods for java.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值