电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java中Lombok @Value注解導致的variable not been initialized問題

瀏覽:100日期:2023-02-07 08:46:59
目錄背景解決背景

想要修改一個POJO類,在其中增加一個字段,但是增加以后就開始報錯:

Java中Lombok @Value注解導致的variable not been initialized問題

該類已經存在一個構造函數,為了不破壞該類原來的使用方式,于是重新寫了一個構造方法,之前的構造函數未改動。 該類被Lombok的@Value注解修飾解決 報錯信息顯示,變量未被初始化。于是主要排查是否有被初始化。 在重寫的構造方法中,我已經對該變量進行了初始化。 不明所以,開始找不同,這個類中,唯一不熟悉的就是@Value注解,于是查看注解中的注釋:

/** * Generates a lot of code which fits with a class that is a representation of an immutable entity. *<p>* Equivalent to {@code@Getter @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE) @AllArgsConstructor @ToString @EqualsAndHashCode}. *<p>* Complete documentation is found at<a href='http://www.hdgsjgj.cn/bcjs/<https://projectlombok.org/features/Value>' rel='external nofollow' >the project lombok features page for&#64;Value</a>. * *@seelombok.Getter*@seelombok.experimental.FieldDefaults*@seelombok.AllArgsConstructor*@seelombok.ToString*@seelombok.EqualsAndHashCode*@seelombok.Data*/@Target(ElementType.TYPE)@Retention(RetentionPolicy.SOURCE)public @interface Value { /** * If you specify a static constructor name, then the generated constructor will be private, and * instead a static factory method is created that other classes can use to create instances. * We suggest the name: 'of', like so: * * <pre> * public @Value(staticConstructor = 'of') class Point { final int x, y; } * </pre> * * Default: No static constructor, instead the normal constructor is public. * * @return Name of static ’constructor’ method to generate (blank = generate a normal constructor). */ String staticConstructor() default '';}

這個注解的作用是為一個不可變的實體類生成一系列與之匹配的代碼。效果等同于以下注解的組合:@Getter @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE) @AllArgsConstructor @ToString @EqualsAndHashCode。

這其中有一個注解比較特殊,@FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE),見名知意,這是一個為字段設置默認屬性的注解,注解的屬性值中,標注了是否設置實例字段為final,訪問級別設置為private。

/** * Adds modifiers to each field in the type with this annotation. *<p>* Complete documentation is found at<a href='http://www.hdgsjgj.cn/bcjs/<https://projectlombok.org/features/experimental/FieldDefaults>' rel='external nofollow' >the project lombok features page for&#64;FieldDefaults</a>. *<p>* If {@codemakeFinal} is {@codetrue}, then each (instance) field that is not annotated with {@code@NonFinal} will have the {@codefinal} modifier added. *<p>* If {@codelevel} is set, then each (instance) field that is package private (i.e. no access modifier) and does not have the {@code@PackagePrivate} annotation will * have the appropriate access level modifier added. */@Target(ElementType.TYPE)@Retention(RetentionPolicy.SOURCE)public @interface FieldDefaults { AccessLevel level() default AccessLevel.NONE; boolean makeFinal() default false;}

若makeFinal是true,則每個實例字段(被@NonFinal注解修飾的除外)都會被final修飾符修飾。若level屬性有值,那么每個包私有訪問的(即沒有訪問修飾符修飾)和沒有被@PackagePrivate注解修飾的實例字段都會被添加一個與屬性值對應的修飾符。

也就是說,@Value標記了此POJO類為不可能變的類,其所有沒有被@NonFinal注解修飾的成員變量,都會被final修飾

事情到了這里,還是不知道問題在哪里(Java基礎差)。繼續找解決辦法。

Google搜索找到此問答:

Lombok @Wither, @Value, @NoArgsConstructor, @AllArgsConstructor do not work together

回答中有一段對于Java final的描述:

A final variable can only be initialized once, either via an initializer or an assignment statement. It does not need to be initialized at the point of declaration: this is called a 'blank final' variable. A blank final instance variable of a class must be definitely assigned in every constructor of the class in which it is declared; similarly, a blank final static variable must be definitely assigned in a static initializer of the class in which it is declared; otherwise, a compile-time error occurs in both cases.

翻譯如下:一個final修飾的變量只能通過初始化器或賦值語句初始化一次。它不需要在聲明處初始化:這被稱為“空白final”變量。類的空白final實例變量必須在聲明它的類的每個構造函數中確定賦值;同樣,空白final靜態變量必須在聲明它的類的靜態初始化器中明確賦值;否則,以上兩種情況下都會發生編譯錯誤。

真相大白,原因是在原來的構造器中沒有對新加入的字段進行初始化。至此,問題解決。

到此這篇關于Java中Lombok @Value注解導致的variable not been initialized問題的文章就介紹到這了,更多相關Java Lombok @Value注解導致問題內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 船老大板材_浙江船老大全屋定制_船老大官网 | 铁艺,仿竹,竹节,护栏,围栏,篱笆,栅栏,栏杆,护栏网,网围栏,厂家 - 河北稳重金属丝网制品有限公司 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 361°官方网站| 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 泥沙分离_泥沙分离设备_泥砂分离机_洛阳隆中重工机械有限公司 | 澳威全屋定制官网|极简衣柜十大品牌|衣柜加盟代理|全屋定制招商 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 芝麻黑-芝麻黑石材厂家-永峰石业| 等离子表面处理机-等离子表面活化机-真空等离子清洗机-深圳市东信高科自动化设备有限公司 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 广州二手电缆线回收,旧电缆回收,广州铜线回收-广东益福电缆线回收公司 | 真空乳化机-灌装封尾机-首页-温州精灌 | 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 杭州用友|用友软件|用友财务软件|用友ERP系统--杭州协友软件官网 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 北京遮阳网-防尘盖土网-盖土草坪-迷彩网-防尘网生产厂家-京兴科技 | 定坤静电科技静电消除器厂家-除静电设备 | 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 股票入门基础知识_股票知识_股票投资大师_格雷厄姆网 | 同步带轮_同步带_同步轮_iHF合发齿轮厂家-深圳市合发齿轮机械有限公司 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 工控机-图像采集卡-PoE网卡-人工智能-工业主板-深圳朗锐智科 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 真空冷冻干燥机_国产冻干机_冷冻干燥机_北京四环冻干 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 法兰连接型电磁流量计-蒸汽孔板节流装置流量计-北京凯安达仪器仪表有限公司 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 建筑资质代办-建筑资质转让找上海国信启航 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 耐高温硅酸铝板-硅酸铝棉保温施工|亿欧建设工程 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 纸布|钩编布|钩针布|纸草布-莱州佳源工艺纸布厂 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | 缠膜机|缠绕包装机|无纺布包装机-济南达伦特机械设备有限公司 |