国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Lombok注解筆記

shery / 1846人閱讀

摘要:設(shè)置為,直接訪問字段,不調(diào)用此處列出的任何字段都不會(huì)在生成的和中使用。與相反,設(shè)置,失效添加注解,參考作用這個(gè)注解似乎沒有實(shí)在的作用,就是標(biāo)記這個(gè)類字段方法是自動(dòng)生成的作用生成寫在類上會(huì)生成該類下所有字段的。有點(diǎn)像的擴(kuò)展函數(shù)。

lombok版本:1.18.2
前言

把lombok的注解過了一遍,發(fā)現(xiàn)有個(gè)@ExtensionMethod和kotlin的拓展函數(shù)有點(diǎn)類似

注解 @AllArgsConstructor
作用

生成包含所有字段的構(gòu)造器

參數(shù)

staticName : 不為空的話,生成一個(gè)靜態(tài)方法返回實(shí)例,并把構(gòu)造器設(shè)置為private

@AllArgsConstructor(staticName = "create")
public class Example {

    private int foo;
    private final String bar;
}

生成:

public class Example {
    private int foo;
    private final String bar;

    private Example(int foo, String bar) {
        this.foo = foo;
        this.bar = bar;
    }

    public static Example create(int foo, String bar) {
        return new Example(foo, bar);
    }
}

access : 構(gòu)造器訪問權(quán)限修飾符,默認(rèn)public

@Builder
作用

生成構(gòu)建者(Builder)模式

例子:
@Builder
public class Example {

    private int foo;
    private final String bar;
}

生成:

public class Example {
    private int foo;
    private final String bar;

    Example(int foo, String bar) {
        this.foo = foo;
        this.bar = bar;
    }

    public static Example.ExampleBuilder builder() {
        return new Example.ExampleBuilder();
    }

    public static class ExampleBuilder {
        private int foo;
        private String bar;

        ExampleBuilder() {
        }

        public Example.ExampleBuilder foo(int foo) {
            this.foo = foo;
            return this;
        }

        public Example.ExampleBuilder bar(String bar) {
            this.bar = bar;
            return this;
        }

        public Example build() {
            return new Example(this.foo, this.bar);
        }

        public String toString() {
            return "Example.ExampleBuilder(foo=" + this.foo + ", bar=" + this.bar + ")";
        }
    }
}
參數(shù)

builderMethodName : 創(chuàng)建構(gòu)建器實(shí)例的方法名稱

buildMethodName:構(gòu)建器類中創(chuàng)建構(gòu)造器實(shí)例的方法名稱

builderClassName:構(gòu)造器類名

toBuilder:生成toBuilder方法

例子
public Example.ExampleBuilder toBuilder() {
    return (new Example.ExampleBuilder()).foo(this.foo).bar(this.bar);
}
@Cleanup
作用

在變量上聲明@Cleanup,生成的代碼會(huì)把變量用try{}包圍,并在finallly塊中調(diào)用close()

例子
public class Example {

    public void copyFile(String in, String out) throws IOException {
        @Cleanup FileInputStream inStream = new FileInputStream(in);
        @Cleanup FileOutputStream outStream = new FileOutputStream(out);
        byte[] b = new byte[65536];
        while (true) {
            int r = inStream.read(b);
            if (r == -1) break;
            outStream.write(b, 0, r);
        }
    }
}

生成后:

public class Example {
    public Example() {
    }

    public void copyFile(String in, String out) throws IOException {
        FileInputStream inStream = new FileInputStream(in);

        try {
            FileOutputStream outStream = new FileOutputStream(out);

            try {
                byte[] b = new byte[65536];

                while(true) {
                    int r = inStream.read(b);
                    if (r == -1) {
                        return;
                    }

                    outStream.write(b, 0, r);
                }
            } finally {
                if (Collections.singletonList(outStream).get(0) != null) {
                    outStream.close();
                }

            }
        } finally {
            if (Collections.singletonList(inStream).get(0) != null) {
                inStream.close();
            }

        }
    }
}
參數(shù)

value:被在finally塊中調(diào)用的方法名,方法體不能帶有參數(shù),默認(rèn)為close

@Data
作用

生成所有字段的getter、toString()、hashCode()、equals()、所有非final字段的setter、構(gòu)造器,相當(dāng)于設(shè)置了 @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode

例子
@Data
public class Example {

    private int foo;
    private final String bar;
}

生成:

public class Example {
    private int foo;
    private final String bar;

    public Example(String bar) {
        this.bar = bar;
    }

    public int getFoo() {
        return this.foo;
    }

    public String getBar() {
        return this.bar;
    }

    public void setFoo(int foo) {
        this.foo = foo;
    }

    public boolean equals(Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof Example)) {
            return false;
        } else {
            Example other = (Example)o;
            if (!other.canEqual(this)) {
                return false;
            } else if (this.getFoo() != other.getFoo()) {
                return false;
            } else {
                Object this$bar = this.getBar();
                Object other$bar = other.getBar();
                if (this$bar == null) {
                    if (other$bar != null) {
                        return false;
                    }
                } else if (!this$bar.equals(other$bar)) {
                    return false;
                }

                return true;
            }
        }
    }

    protected boolean canEqual(Object other) {
        return other instanceof Example;
    }

    public int hashCode() {
        int PRIME = true;
        int result = 1;
        int result = result * 59 + this.getFoo();
        Object $bar = this.getBar();
        result = result * 59 + ($bar == null ? 43 : $bar.hashCode());
        return result;
    }

    public String toString() {
        return "Example(foo=" + this.getFoo() + ", bar=" + this.getBar() + ")";
    }
}
@Delegate @EqualsAndHashCode
作用

生成hashCode()、equals(),效果見@Data

參數(shù)

callSuper:是否調(diào)用父類的hashCode(),默認(rèn):false

doNotUseGetters:是否不調(diào)用字段的getter,默認(rèn)如果有g(shù)etter會(huì)調(diào)用。設(shè)置為true,直接訪問字段,不調(diào)用getter

exclude:此處列出的任何字段都不會(huì)在生成的equals和hashCode中使用。

of:與exclude相反,設(shè)置of,exclude失效

onParam:添加注解,參考@Getter#onMethod

@Generated
作用

這個(gè)注解似乎沒有實(shí)在的作用,就是標(biāo)記這個(gè)類、字段、方法是自動(dòng)生成的

@Getter
作用

生成getter、寫在類上會(huì)生成該類下所有字段的getter。寫在某個(gè)字段上就作用與該字段

參數(shù)

onMethod:把需要添加的注解寫在這

例子
public class Example {

    @Getter(onMethod_={@Deprecated}) // JDK7寫法 @Getter(onMethod=@__({@Deprecated}))
    private int foo;
    private final String bar  = "";
}

生成:

public class Example {
    private int foo;
    private final String bar = "";

    public Example() {
    }

    /** @deprecated */
    @Deprecated
    public int getFoo() {
        return this.foo;
    }
}

value:訪問權(quán)限修飾符

@NoArgsConstructor
作用

生成無參數(shù)構(gòu)造器

參數(shù)

access:訪問權(quán)限修飾符

force:為true時(shí),強(qiáng)制生成構(gòu)造器,final字段初始化為null

onConstructor:添加注解,參考@Getter#onMethod

@NonNull
作用

空檢查

例子
public class Example {

    @NonNull
    @Getter
    @Setter
    private Integer foo;
}

生成后:

public class Example {
    @NonNull
    private Integer foo;

    public Example() {
    }

    @NonNull
    public Integer getFoo() {
        return this.foo;
    }

    public void setFoo(@NonNull Integer foo) {
        if (foo == null) {
            throw new NullPointerException("foo is marked @NonNull but is null");
        } else {
            this.foo = foo;
        }
    }
}
@RequiredArgsConstructor
作用

生成必須初始化字段的構(gòu)造器,比如帶final、@NonNull

例子
@RequiredArgsConstructor
public class Example {

    @NonNull
    private Integer foo;
    private final String bar;
}

生成后:

public class Example {
    @NonNull
    private Integer foo;
    private final String bar;

    public Example(@NonNull Integer foo, String bar) {
        if (foo == null) {
            throw new NullPointerException("foo is marked @NonNull but is null");
        } else {
            this.foo = foo;
            this.bar = bar;
        }
    }
}
@Setter
作用

生成Setter

參數(shù)

onMethod:在方法上添加中注解,見@Getter#onMethod

onParam:在方法的參數(shù)上添加注解,見@Getter#onMethod

value:訪問權(quán)限修飾符

@Singular
作用

這個(gè)注解和@Builder一起使用,為Builder生成字段是集合類型的add方法,字段名不能是單數(shù)形式,否則需要指定value值

例子
@Builder
public class Example {

    @Singular
    @Setter
    private List foos;
}

生成:

public class Example {
    private List foos;

    Example(List foos) {
        this.foos = foos;
    }

    public static Example.ExampleBuilder builder() {
        return new Example.ExampleBuilder();
    }

    public void setFoos(List foos) {
        this.foos = foos;
    }

    public static class ExampleBuilder {
        private ArrayList foos;

        ExampleBuilder() {
        }
        
        // 這方法是@Singular作用生成的
        public Example.ExampleBuilder foo(Integer foo) {
            if (this.foos == null) {
                this.foos = new ArrayList();
            }

            this.foos.add(foo);
            return this;
        }

        public Example.ExampleBuilder foos(Collection foos) {
            if (this.foos == null) {
                this.foos = new ArrayList();
            }

            this.foos.addAll(foos);
            return this;
        }

        public Example.ExampleBuilder clearFoos() {
            if (this.foos != null) {
                this.foos.clear();
            }

            return this;
        }

        public Example build() {
            List foos;
            switch(this.foos == null ? 0 : this.foos.size()) {
            case 0:
                foos = Collections.emptyList();
                break;
            case 1:
                foos = Collections.singletonList(this.foos.get(0));
                break;
            default:
                foos = Collections.unmodifiableList(new ArrayList(this.foos));
            }

            return new Example(foos);
        }

        public String toString() {
            return "Example.ExampleBuilder(foos=" + this.foos + ")";
        }
    }
}
@SneakyThrows
作用

用try{}catch{}捕捉異常

例子
public class Example {

    @SneakyThrows(UnsupportedEncodingException.class)
    public String utf8ToString(byte[] bytes) {
        return new String(bytes, "UTF-8");
    }
}

生成后:

public class Example {
    public Example() {
    }

    public String utf8ToString(byte[] bytes) {
        try {
            return new String(bytes, "UTF-8");
        } catch (UnsupportedEncodingException var3) {
            throw var3;
        }
    }
}
@Synchronized
作用

生成Synchronized(){}包圍代碼

例子
public class Example {

    @Synchronized
    public String utf8ToString(byte[] bytes) {
        return new String(bytes, Charset.defaultCharset());
    }
}

生成后:

public class Example {
    private final Object $lock = new Object[0];

    public Example() {
    }

    public String utf8ToString(byte[] bytes) {
        Object var2 = this.$lock;
        synchronized(this.$lock) {
            return new String(bytes, Charset.defaultCharset());
        }
    }
}
@ToString
作用

生成toString()方法

@val
作用

變量聲明類型推斷

例子
public class ValExample {
    public String example() {
        val example = new ArrayList();
        example.add("Hello, World!");
        val foo = example.get(0);
        return foo.toLowerCase();
    }

    public void example2() {
        val map = new HashMap();
        map.put(0, "zero");
        map.put(5, "five");
        for (val entry : map.entrySet()) {
            System.out.printf("%d: %s
", entry.getKey(), entry.getValue());
        }
    }
}

生成后:

public class ValExample {
    public ValExample() {
    }

    public String example() {
        ArrayList example = new ArrayList();
        example.add("Hello, World!");
        String foo = (String)example.get(0);
        return foo.toLowerCase();
    }

    public void example2() {
        HashMap map = new HashMap();
        map.put(0, "zero");
        map.put(5, "five");
        Iterator var2 = map.entrySet().iterator();

        while(var2.hasNext()) {
            Entry entry = (Entry)var2.next();
            System.out.printf("%d: %s
", entry.getKey(), entry.getValue());
        }

    }
}
@Value
作用

把類聲明為final,并添加toString()、hashCode()等方法,相當(dāng)于 @Getter @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE) @AllArgsConstructor @ToString @EqualsAndHashCode.

例子
@Value
public class Example {

    private Integer foo;
}

生成后:

public final class Example {
    private final Integer foo;

    public Example(Integer foo) {
        this.foo = foo;
    }

    public Integer getFoo() {
        return this.foo;
    }

    public boolean equals(Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof Example)) {
            return false;
        } else {
            Example other = (Example)o;
            Object this$foo = this.getFoo();
            Object other$foo = other.getFoo();
            if (this$foo == null) {
                if (other$foo != null) {
                    return false;
                }
            } else if (!this$foo.equals(other$foo)) {
                return false;
            }

            return true;
        }
    }

    public int hashCode() {
        int PRIME = true;
        int result = 1;
        Object $foo = this.getFoo();
        int result = result * 59 + ($foo == null ? 43 : $foo.hashCode());
        return result;
    }

    public String toString() {
        return "Example(foo=" + this.getFoo() + ")";
    }
}
@var
作用

和val一樣,官方文檔中說區(qū)別就是var不加final修飾,但測(cè)試的效果是一樣的

Experimental注解
在lombok.experimental包下
@Accessors
作用

默認(rèn)情況下,沒什么作用,需要設(shè)置參數(shù)

參數(shù)

chain:為true時(shí),setter鏈?zhǔn)椒祷兀磗etter的返回值為this

fluent:為true時(shí),默認(rèn)設(shè)置chain為true,setter的方法名修改為字段名

@Delegate
作用

代理模式,把字段的方法代理給類,默認(rèn)代理所有方法

參數(shù)

types:指定代理的方法

excludes:和types相反

例子
public class Example {

    private interface Add {
        boolean add(String x);
        boolean addAll(Collection x);
    }

    private @Delegate(types = Add.class) List strings;
}

生成后:

public class Example {
    private List strings;

    public Example() {
    }

    public boolean add(String x) {
        return this.strings.add(x);
    }

    public boolean addAll(Collection x) {
        return this.strings.addAll(x);
    }

    private interface Add {
        boolean add(String var1);

        boolean addAll(Collection var1);
    }
}
@ExtensionMethod
作用

拓展方法,向現(xiàn)有類型“添加”方法,而無需創(chuàng)建新的派生類型。有點(diǎn)像kotlin的擴(kuò)展函數(shù)。

例子
@ExtensionMethod({Arrays.class, Extensions.class})
public class Example {

    public static void main(String[] args) {
        int[] intArray = {5, 3, 8, 2};
        intArray.sort();
        int num = 1;
        num = num.increase();

        Arrays.stream(intArray).forEach(System.out::println);
        System.out.println("num = " + num);
    }
}

class Extensions {
    public static int increase(int num) {
        return ++num;
    }
}

生成后:

public class Example {
    public Example() {
    }

    public static void main(String[] args) {
        int[] intArray = new int[]{5, 3, 8, 2};
        Arrays.sort(intArray);
        int num = 1;
        int num = Extensions.increase(num);
        IntStream var10000 = Arrays.stream(intArray);
        PrintStream var10001 = System.out;
        System.out.getClass();
        var10000.forEach(var10001::println);
        System.out.println("num = " + num);
    }
}

輸出:

2
3
5
8
num = 2
@FieldDefaults
作用

定義類、字段的修飾符

參數(shù)

AccessLevel:訪問權(quán)限修飾符

makeFinal:是否加final

@FieldNameConstants
作用

默認(rèn)生成一個(gè)常量,名稱為大寫字段名,值為字段名

參數(shù)

prefix:前綴

suffix:后綴

例子
public class Example {

    @FieldNameConstants(prefix = "PREFIX_", suffix = "_SUFFIX")
    private String foo;
}

生成后:

public class Example {
    public static final String PREFIX_FOO_SUFFIX = "foo";
    private String foo;

    public Example() {
    }
}
@Helper
作用

方法內(nèi)部的類方法暴露給方法使用

測(cè)試時(shí),maven編譯不通過。
@NonFinal
作用

設(shè)置不為Final,@FieldDefaults和@Value也有這功能

@PackagePrivate
作用

設(shè)置為private,@FieldDefaults和@Value也有這功能

@SuperBuilder @Tolerate @UtilityClass @Wither
作用

生成withXXX方法,返回類實(shí)例

例子
@RequiredArgsConstructor
public class Example {
    private @Wither final int foo;
}

生成后:

public class Example {
    private final int foo;

    public Example(int foo) {
        this.foo = foo;
    }

    public Example withFoo(int foo) {
        return this.foo == foo ? this : new Example(foo);
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/76816.html

相關(guān)文章

  • Java 編譯器 javac 筆記:javac API、注解處理 API 與 Lombok 原理

    摘要:對(duì)語法樹的掃描,同樣提供了掃描器。詞法分析過程如下圖所示語法分析,即根據(jù)語法由序列生成抽象語法樹,對(duì)應(yīng)實(shí)現(xiàn)類為。生成的抽象語法樹如下圖所示的實(shí)現(xiàn)原理依賴開發(fā)的典型的第三方庫(kù)有,代碼自動(dòng)生成的和,代碼檢查的和,編譯階段完成依賴注入的等。 原文:http://nullwy.me/2017/04/java...如果覺得我的文章對(duì)你有用,請(qǐng)隨意贊賞 javac 是 Java 代碼的編譯器 [...

    lookSomeone 評(píng)論0 收藏0
  • 使用 lombok 簡(jiǎn)化 Java 代碼

    摘要:使用可以大大減少代碼行數(shù),提高開發(fā)效率。提供了日志工具無參構(gòu)造器提供方法提供方法方法有參構(gòu)造器,參數(shù)按屬性定義順序傳入提供了空指針檢測(cè),會(huì)拋出異常 lombok 是一個(gè)第三方工具,提供了一些注解功能,可以幫助我們消除冗余、臃腫的 Java 代碼,比如 POJO 的 getter/setter 方法、構(gòu)造方法、hashcode 方法等。lombok 在編譯時(shí)根據(jù)注解生成具體的代碼,在虛擬...

    CloudwiseAPM 評(píng)論0 收藏0
  • 第二十九章:基于SpringBoot平臺(tái)使用Lombok來優(yōu)雅的編碼

    摘要:還提供了全部參數(shù)的構(gòu)造函數(shù)的自動(dòng)生成,該注解的作用域也是只有在實(shí)體類上,因?yàn)橹挥袑?shí)體類才會(huì)存在構(gòu)造函數(shù)。當(dāng)然除了全部參數(shù)的構(gòu)造函數(shù),還提供了沒有參數(shù)的構(gòu)造函數(shù),使用方式與一致。 Lombok對(duì)于Java偷懶開發(fā)者來說應(yīng)該是比較中意的,恰恰筆者就是一個(gè)喜歡在小細(xì)節(jié)上偷懶來提高開發(fā)效率的人。所以在技術(shù)框架的海洋里尋找了很久才在GitHub開源平臺(tái)上找到,而在這之前國(guó)外很多程序猿一直使用該框...

    fanux 評(píng)論0 收藏0
  • Lombok安裝及Spring Boot集成Lombok

    摘要:注意,其是在編譯源碼過程中,幫你自動(dòng)生成的。就是說,將極大減少你的代碼總量。注解和類似,區(qū)別在于它會(huì)把所有成員變量默認(rèn)定義為修飾,并且不會(huì)生成方法。不同的日志注解總結(jié)如下上面是注解,下面是編譯后的代碼參考資料下的安裝以及使用簡(jiǎn)介注解介紹 Lombok有什么用 在我們實(shí)體Bean中有大量的Getter/Setter方法以及toString, hashCode等可能不會(huì)用到,但是某些時(shí)候仍...

    dkzwm 評(píng)論0 收藏0
  • Lombok 看這篇就夠了

    摘要:注解在類上為類提供一個(gè)全參的構(gòu)造方法,加了這個(gè)注解后,類中不提供默認(rèn)構(gòu)造方法了。這個(gè)注解用在類上,使用類中所有帶有注解的或者帶有修飾的成員變量生成對(duì)應(yīng)的構(gòu)造方法。 轉(zhuǎn)載請(qǐng)注明原創(chuàng)地址:http://www.54tianzhisheng.cn/2018/01/07/lombok/ showImg(http://ohfk1r827.bkt.clouddn.com/blog/180107/7...

    LeanCloud 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

shery

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<