In this post I will write two small tips.
1) firstly it check if message will be used, then transform parameters to String type and build all message,
2) helps to have clean code without concatenation of parameters
LOGGER.debug("Test message {} {} {}{}{}{}{}{}{}", 3, "+", 3, =, null, " 6");
Earlier I use to check logging level manually and use to format messages by String::printf
Lombok - builder pattern is great pattern to create immutable value object with many attributes. Lombok does it for you, you have only to add @Builder annotation. Unfortunately it has other standard of calling setter method (there is no set prefix) and it is useless to create builder for inheritance’s class.
Bellow I compare simple class with lombok annotations and equivalent to it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import lombok.Builder; import lombok.Data; import lombok.NonNull; @Data @Builder public class MyLoombok { @NonNull private final String attr1; @NonNull private final int attr2; } |
Generated code of builder.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | import lombok.NonNull; public class MyLoombok { @NonNull private final String attr1; @NonNull private final int attr2; @java.beans.ConstructorProperties({"attr1", "attr2"}) MyLoombok(String attr1, int attr2) { this.attr1 = attr1; this.attr2 = attr2; } public static MyLoombokBuilder builder() { return new MyLoombokBuilder(); } @NonNull public String getAttr1() { return this.attr1; } @NonNull public int getAttr2() { return this.attr2; } public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof MyLoombok)) return false; final MyLoombok other = (MyLoombok) o; if (!other.canEqual((Object) this)) return false; final Object this$attr1 = this.getAttr1(); final Object other$attr1 = other.getAttr1(); if (this$attr1 == null ? other$attr1 != null : !this$attr1.equals(other$attr1)) return false; if (this.getAttr2() != other.getAttr2()) return false; return true; } public int hashCode() { final int PRIME = 59; int result = 1; final Object $attr1 = this.getAttr1(); result = result * PRIME + ($attr1 == null ? 43 : $attr1.hashCode()); result = result * PRIME + this.getAttr2(); return result; } protected boolean canEqual(Object other) { return other instanceof MyLoombok; } public String toString() { return "singleclass.MyLoombok(attr1=" + this.getAttr1() + ", attr2=" + this.getAttr2() + ")"; } public static class MyLoombokBuilder { private String attr1; private int attr2; MyLoombokBuilder() { } public MyLoombok.MyLoombokBuilder attr1(String attr1) { this.attr1 = attr1; return this; } public MyLoombok.MyLoombokBuilder attr2(int attr2) { this.attr2 = attr2; return this; } public MyLoombok build() { return new MyLoombok(attr1, attr2); } public String toString() { return "singleclass.MyLoombok.MyLoombokBuilder(attr1=" + this.attr1 + ", attr2=" + this.attr2 + ")"; } } } |
No comments:
Post a Comment