• Lombok使用坑之属性不区分大小写


    实验环境说明:

    1:JDK 1.8.0_241

    2:IDEA IntelliJ 2018.3

    3:Lombok 1.18.8

    由于Fastjson漏洞比较多,所以,我调研换用Jackson是否OK,在实验的过程中发现了Lombok的一个细节,如果不注意,可能存在问题,问题比较简单,代码一贴基本就能看出来了!

    4:源码如下所示

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class TestLombok {
        private long _long;
        private Long _Long;
    
        private byte _byte;
        private Byte _Byte;
    
        private double _double;
        private Double _Double;
    
        private boolean _boolean;
        private Boolean _Boolean;
    
        private float _float;
        private Float _Float;
    
        private String myName;
        private String mYnAmE;
        private String MyNaMe;
        private String my_name;
    }

    5:生成的反编译字节码如下所示

    public class TestLombok {
        private long _long;
        private Long _Long;
        private byte _byte;
        private Byte _Byte;
        private double _double;
        private Double _Double;
        private boolean _boolean;
        private Boolean _Boolean;
        private float _float;
        private Float _Float;
        private String myName;
        private String mYnAmE;
        private String MyNaMe;
        private String my_name;
    
        public long get_long() {
            return this._long;
        }
    
        public byte get_byte() {
            return this._byte;
        }
    
        public double get_double() {
            return this._double;
        }
    
        public boolean is_boolean() {
            return this._boolean;
        }
    
        public Boolean get_Boolean() {
            return this._Boolean;
        }
    
        public float get_float() {
            return this._float;
        }
    
        public String getMyName() {
            return this.myName;
        }
    
        public String getMy_name() {
            return this.my_name;
        }
    
        public void set_long(long _long) {
            this._long = _long;
        }
    
        public void set_byte(byte _byte) {
            this._byte = _byte;
        }
    
        public void set_double(double _double) {
            this._double = _double;
        }
    
        public void set_boolean(boolean _boolean) {
            this._boolean = _boolean;
        }
    
        public void set_float(float _float) {
            this._float = _float;
        }
    
        public void setMyName(String myName) {
            this.myName = myName;
        }
    
        public void setMy_name(String my_name) {
            this.my_name = my_name;
        }
    
        public boolean equals(Object o) {
            if (o == this) {
                return true;
            } else if (!(o instanceof TestLombok)) {
                return false;
            } else {
                TestLombok other = (TestLombok)o;
                if (!other.canEqual(this)) {
                    return false;
                } else if (this.get_long() != other.get_long()) {
                    return false;
                } else if (this.get_long() != other.get_long()) {
                    return false;
                } else if (this.get_byte() != other.get_byte()) {
                    return false;
                } else if (this.get_byte() != other.get_byte()) {
                    return false;
                } else if (Double.compare(this.get_double(), other.get_double()) != 0) {
                    return false;
                } else if (Double.compare(this.get_double(), other.get_double()) != 0) {
                    return false;
                } else {
                    label106: {
                        Object this$_boolean = this.get_Boolean();
                        Object other$_boolean = other.get_Boolean();
                        if (this$_boolean == null) {
                            if (other$_boolean == null) {
                                break label106;
                            }
                        } else if (this$_boolean.equals(other$_boolean)) {
                            break label106;
                        }
    
                        return false;
                    }
    
                    Object this$_Boolean = this.get_Boolean();
                    Object other$_Boolean = other.get_Boolean();
                    if (this$_Boolean == null) {
                        if (other$_Boolean != null) {
                            return false;
                        }
                    } else if (!this$_Boolean.equals(other$_Boolean)) {
                        return false;
                    }
    
                    if (Float.compare(this.get_float(), other.get_float()) != 0) {
                        return false;
                    } else if (Float.compare(this.get_float(), other.get_float()) != 0) {
                        return false;
                    } else {
                        label89: {
                            Object this$myName = this.getMyName();
                            Object other$myName = other.getMyName();
                            if (this$myName == null) {
                                if (other$myName == null) {
                                    break label89;
                                }
                            } else if (this$myName.equals(other$myName)) {
                                break label89;
                            }
    
                            return false;
                        }
    
                        Object this$mYnAmE = this.getMyName();
                        Object other$mYnAmE = other.getMyName();
                        if (this$mYnAmE == null) {
                            if (other$mYnAmE != null) {
                                return false;
                            }
                        } else if (!this$mYnAmE.equals(other$mYnAmE)) {
                            return false;
                        }
    
                        label75: {
                            Object this$MyNaMe = this.getMyName();
                            Object other$MyNaMe = other.getMyName();
                            if (this$MyNaMe == null) {
                                if (other$MyNaMe == null) {
                                    break label75;
                                }
                            } else if (this$MyNaMe.equals(other$MyNaMe)) {
                                break label75;
                            }
    
                            return false;
                        }
    
                        Object this$my_name = this.getMy_name();
                        Object other$my_name = other.getMy_name();
                        if (this$my_name == null) {
                            if (other$my_name != null) {
                                return false;
                            }
                        } else if (!this$my_name.equals(other$my_name)) {
                            return false;
                        }
    
                        return true;
                    }
                }
            }
        }
    
        protected boolean canEqual(Object other) {
            return other instanceof TestLombok;
        }
    
        public int hashCode() {
            int PRIME = true;
            int result = 1;
            long $_long = this.get_long();
            int result = result * 59 + (int)($_long >>> 32 ^ $_long);
            long $_Long = this.get_long();
            result = result * 59 + (int)($_Long >>> 32 ^ $_Long);
            result = result * 59 + this.get_byte();
            result = result * 59 + this.get_byte();
            long $_double = Double.doubleToLongBits(this.get_double());
            result = result * 59 + (int)($_double >>> 32 ^ $_double);
            long $_Double = Double.doubleToLongBits(this.get_double());
            result = result * 59 + (int)($_Double >>> 32 ^ $_Double);
            Object $_boolean = this.get_Boolean();
            result = result * 59 + ($_boolean == null ? 43 : $_boolean.hashCode());
            Object $_Boolean = this.get_Boolean();
            result = result * 59 + ($_Boolean == null ? 43 : $_Boolean.hashCode());
            result = result * 59 + Float.floatToIntBits(this.get_float());
            result = result * 59 + Float.floatToIntBits(this.get_float());
            Object $myName = this.getMyName();
            result = result * 59 + ($myName == null ? 43 : $myName.hashCode());
            Object $mYnAmE = this.getMyName();
            result = result * 59 + ($mYnAmE == null ? 43 : $mYnAmE.hashCode());
            Object $MyNaMe = this.getMyName();
            result = result * 59 + ($MyNaMe == null ? 43 : $MyNaMe.hashCode());
            Object $my_name = this.getMy_name();
            result = result * 59 + ($my_name == null ? 43 : $my_name.hashCode());
            return result;
        }
    
        public String toString() {
            return "TestLombok(_long=" + this.get_long() + ", _Long=" + this.get_long() + ", _byte=" + this.get_byte() + ", _Byte=" + this.get_byte() + ", _double=" + this.get_double() + ", _Double=" + this.get_double() + ", _boolean=" + this.get_Boolean() + ", _Boolean=" + this.get_Boolean() + ", _float=" + this.get_float() + ", _Float=" + this.get_float() + ", myName=" + this.getMyName() + ", mYnAmE=" + this.getMyName() + ", MyNaMe=" + this.getMyName() + ", my_name=" + this.getMy_name() + ")";
        }
    
        public TestLombok() {
        }
    
        public TestLombok(long _long, Long _Long, byte _byte, Byte _Byte, double _double, Double _Double, boolean _boolean, Boolean _Boolean, float _float, Float _Float, String myName, String mYnAmE, String MyNaMe, String my_name) {
            this._long = _long;
            this._Long = _Long;
            this._byte = _byte;
            this._Byte = _Byte;
            this._double = _double;
            this._Double = _Double;
            this._boolean = _boolean;
            this._Boolean = _Boolean;
            this._float = _float;
            this._Float = _Float;
            this.myName = myName;
            this.mYnAmE = mYnAmE;
            this.MyNaMe = MyNaMe;
            this.my_name = my_name;
        }
    }

    6:结论

         6-1:自动生成的Setter/Getter方法少了,貌似属性不区分大小写

         6-2:equals方法也是存在问题,某些属性的Getter方法使用错误

  • 相关阅读:
    vs调试技巧
    ubuntu中安装Docker
    Docker的简单认知
    mysql笔记01
    5款实用的硬盘、SSD固态硬盘、U盘、储存卡磁盘性能测试工具绿色版
    怎么用HD Tune检测硬盘坏道
    Dreamweaver_CS6安装与破解
    Microsoft Office 2013 (64位) 免费完整版(安装 + 激活)
    Microsoft office2007免费版下载(安装 + 破解)
    OneNote如何使用
  • 原文地址:https://www.cnblogs.com/godtrue/p/12553428.html
Copyright © 2020-2023  润新知