久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

CTO:不要在代碼中寫 set/get 方法了,逮一次罰款...

 西北望msm66g9f 2021-01-03


   正文   


CTO:what,?你的 Java 代碼中還充斥著大量的 set/get 方法
于是公司出了規(guī)定:不要在代碼中寫 set/get 方法了,,逮一次罰款。
剛開始學(xué)習(xí) Java 語(yǔ)言的時(shí)候,,面向?qū)ο蟮娜筇卣骶褪欠庋b,,繼承,和多態(tài),。在 Java 中,,要保證封裝性,需要將成員變量私有化,,對(duì)外提供 set/get 方法來(lái)訪問,,雖然現(xiàn)在的 IDE,,像 eclipse,IDEA都提供了快捷鍵,,來(lái)生成 set/get 方法,,但是在做項(xiàng)目的時(shí)候,一個(gè) JavaBean 往往會(huì)有很多的成員變量,,一個(gè)變量對(duì)應(yīng)兩個(gè)方法,,如果有10幾個(gè)成員變量,那么會(huì)對(duì)應(yīng)20多個(gè)方法,,也許還要去寫構(gòu)造器,、equals 等方法,而且需要維護(hù),。這樣一來(lái),,會(huì)使代碼變得非常冗余,這些顯得很冗長(zhǎng)也沒有太多技術(shù)含量,,一旦修改屬性,,就容易出現(xiàn)忘記修改對(duì)應(yīng)方法的失誤。
我在看大項(xiàng)目的源碼的時(shí)候,,看到他們的代碼中都沒有 set/get 方法,,取而代之的是在 JavaBean 上標(biāo)注的注解,,我感到非常的好奇,,原來(lái)他們是用了一種叫做 Lombok 的插件,便去詳細(xì)了解了這個(gè)插件,。


Lombok背景介紹

官方介紹如下:
Project Lombok makes java a spicier language by adding 'handlers' that know how to build and compile simple, boilerplate-free, not-quite-java code.
大致意思是 Lombok 通過(guò)增加一些“處理程序”,,可以讓 Java 變得簡(jiǎn)潔、快速,。

Lombok使用方法

Lombok 能通過(guò)注解的方式,,在編譯時(shí)自動(dòng)為屬性生成構(gòu)造器、getter/setter,、equals,、hashcode、toString 方法,。出現(xiàn)的神奇就是在源碼中沒有 getter 和 setter 方法,,但是在編譯生成的字節(jié)碼文件中有 getter 和 setter 方法。這樣就省去了手動(dòng)重建這些代碼的麻煩,,使代碼看起來(lái)更簡(jiǎn)潔些,。
Lombok 的使用跟引用 jar 包一樣,可以在官網(wǎng)(https:///download)下載 jar 包,,也可以使用 maven 添加依賴:
<dependency>
  <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
    <scope>provided</scope>
</dependency>
注意:
第一次使用 Lombok 插件需要做如下幾步配置
  • 將 Lombok 插件安裝到 IDEA
file -> setting
選中 Plugins,,搜索 Lombok,,點(diǎn)擊 Install
在公眾號(hào)程序員小樂后臺(tái)回復(fù)“Java”,獲取Java面試題和答案,。
  • 選擇默認(rèn)的編譯方式為 javac,,因?yàn)?eclipse 是不支持 Lombok 的編譯方式的,javac 支持 Lombok 的編譯方式,。

  • 打開注解生成器 Enable annotation processing

再次注意:
IntelliJ IDEA 2019.2(也就是我用的版本)默認(rèn)是不支持 Lombok 插件的,,需要去
https://plugins.jetbrains.com/plugin/6317-lombok/versions
下載對(duì)應(yīng)版本的插件,然后手動(dòng)引入,,在 IDEA 中選擇 File -> Setting -> plugins 找到 Install Plugin from Disk…(注意版本不同位置可能有所差異)
接下來(lái)我們來(lái)分析 Lombok 中注解的具體用法
@Data
@Data 注解在類上,,會(huì)為類的所有屬性自動(dòng)生成 setter/getter、equals,、canEqual,、hashCode、toString 方法,,如為 final 屬性,,則不會(huì)為該屬性生成 setter 方法。
比如我們寫一個(gè)學(xué)生類
@Data
public class Student {

    private String name;

    private Integer age;

    private Integer id;

    private String major;

}
這樣就可以調(diào)用 set/get 方法了,。
@Getter/@Setter
如果覺得@Data 太過(guò)殘暴(因?yàn)锧Data 集合了@ToString,、@EqualsAndHashCode、@Getter/@Setter,、@RequiredArgsConstructor 的所有特性)不夠精細(xì),,可以使用@Getter/@Setter 注解,此注解在屬性上,,可以為相應(yīng)的屬性自動(dòng)生成 set/get 方法,。
public class Student {
   @Setter private String name;

    private Integer age;

    private Integer id;

    private String major;

    public static void main(String[] args) {

        Student stu = new Student();

        stu.setName('Mr.ml');

    }
}
@NonNull
該注解用在屬性或構(gòu)造器上,Lombok 會(huì)生成一個(gè)非空的聲明,,可用于校驗(yàn)參數(shù),,能幫助避免空指針。
public class Student {
  @Setter private String name;

    private Integer age;

    private Integer id;

    private String major;



    public Student(@NonNull String name) {

        this.name = name;

    }

}
@Cleanup
該注解能幫助我們自動(dòng)調(diào)用 close() 方法,,很大的簡(jiǎn)化了代碼,。
public class CleanupExample {
  public static void main(String[] args) throws IOException {

  @Cleanup InputStream in = new FileInputStream(args[0]);

  @Cleanup OutputStream out = new FileOutputStream(args[1]);

  byte[] b = new byte[10000];

  while (true) {

   int r = in.read(b);

        if (r == -1break;

        out.write(b, 0, r);

     }

   }

}
@EqualsAndHashCode
默認(rèn)情況下,會(huì)使用所有非靜態(tài)(non-static)和非瞬態(tài)(non-transient)屬性來(lái)生成 equals 和 hashCode,,也能通過(guò) exclude 注解來(lái)排除一些屬性,。
@EqualsAndHashCode(exclude={'id''shape'})
public class EqualsAndHashCodeExample {

    private transient int transientVar = 10;

    private String name;

    private double score;

    private Shape shape = new Square(510);

    private String[] tags;

    private int id;

    public String getName() {

        return this.name;

    }

    @EqualsAndHashCode(callSuper=true)

    public static class Square extends Shape {

        private final int width, height;

        public Square(int width, int height) {

            this.width = width;

            this.height = height;

        }

    }

}
@ToString
類使用@ToString 注解,Lombok 會(huì)生成一個(gè) toString() 方法,,默認(rèn)情況下,,會(huì)輸出類名、所有屬性(會(huì)按照屬性定義順序),,用逗號(hào)來(lái)分割,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多