คำอธิบายประกอบ ส่วนที่หนึ่ง น่าเบื่อนิดหน่อย ในส่วนนี้ ฉันตัดสินใจที่จะพูดถึงห้องสมุดลอมบอกในฐานะตัวแทนที่รู้จักกันดีของคำอธิบายประกอบแหล่งที่มา พร้อมคำอธิบายประกอบรันไทม์ในบทความถัดไป กาลครั้งหนึ่งมีโปรแกรมเมอร์ Java คนหนึ่ง เขาเขียนโค้ดธรรมดาทุกวัน เช่น:
ฉันหวังว่าคุณผู้อ่านจะพบว่าน่าสนใจ เพราะต่อไปนี้เป็นการแนะนำสั้นๆ และลิงก์ไปยังรายละเอียดต่างๆ ลอมบอกยังให้โอกาสในการปรับแต่งการสร้าง getters, setters หรือ hashcodes ทั้งหมดไม่จำเป็นต้องสร้างแตกต่างออกไปเสมอไป ดังนั้นจึงมีคำอธิบายประกอบแยกกัน (ฉันคิดว่าหลายรายการไม่ต้องการคำอธิบาย) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor, @RequiredArgsConstructor และ @AllArgsConstructor @Log เหล่านี้เป็นคำอธิบายประกอบทั่วไปที่สุด สามารถ ดู ทั้งชุดได้ที่นี่ var และ val สมควรได้รับความสนใจเป็นพิเศษ สามารถเขียนได้ดังนี้
package lombok;
public class Chelovek {
private String name;
private int age;
public Chelovek(String name, int age) {
this.name = name;
this.age = age;
}
public Chelovek() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Chelovek chelovek = (Chelovek) o;
if (age != chelovek.age) return false;
return name != null ? name.equals(chelovek.name) : chelovek.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
@Override
public String toString() {
return "Chelovek{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
นี่เป็นคลาสทั่วไปที่มีเพียง 2 ฟิลด์ (แต่บางครั้งอาจมีมากกว่า 10-15 ฟิลด์) ใช่แน่นอน ทั้งหมดนี้สามารถสร้างได้ใน IDE แต่ให้ตายเถอะ มันกินพื้นที่ หากมี 15-20 ฟิลด์ ทั้งหมดจำเป็นต้องมี getters, setters, Constructor... ในบรรดาทั้งหมดนี้ วิธีการอื่นอีกสองสามวิธีที่มองไม่เห็นด้วยตาเปล่าอาจสูญหายได้ง่าย ฉันจะช่วยให้โปรแกรมเมอร์เขียนเร็วขึ้นและน้อยลงได้อย่างไร? ลอมบอก ตรงเข้าความร้อนระดับเดียวกันแต่ใช้ลอมบอก:
package lombok;
@Data
public class Chelovek {
private String name;
private int age;
}
ใช่นั่นคือทั้งหมด เย็น? คำอธิบายประกอบ @Dataจะ ทำ อะไร ในขั้นตอนการคอมไพล์ มันจะสร้าง getters/setters สำหรับทุกฟิลด์ toString และกำหนดใหม่เท่ากับและ hashCode ตามมาตรฐาน คุณสามารถติดตั้งปลั๊กอินใน IDE และจะเห็นวิธีการทั้งหมดที่ยังไม่ได้สร้าง

package lombok;
import lombok.experimental.var;
@Data
public class Chelovek {
private String name;
private int age;
public static void main(String[] args) {
var chelovek = new Chelovek();
chelovek.setAge(22);
System.out.println(chelovek);
}
}
เหตุใดจึงจำเป็น? ตัวอย่างเช่น เรามีคลาส RandomAccessFileChannel แล้วทำไมเราต้องเขียนแบบนี้:
RandomAccessFileChannel channel = new RandomAccessFileChannel();
หากเป็นไปได้เช่นนี้:
var channel2 = new RandomAccessFileChannel();
ในความคิดของฉัน สิ่งนี้ไม่เป็นที่ยอมรับเสมอไป ตัวอย่างเช่น เรามีวิธีการชั่วร้ายที่ส่งคืนแผนที่ชั่วร้าย:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap(){
return new HashMap<>();
}
ถ้าคุณเรียกมันแบบนี้:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
มันชัดเจนไม่มากก็น้อยว่าเรากำลังทำงานกับอะไร หากการโทรเป็นดังนี้:
var listSetMap = evilMap();
ถ้าอย่างนั้นใครจะรู้ว่า evilMap() ส่งคืนอะไร และจนกว่าคุณจะดูวิธีการนั้นเอง คุณจะไม่รู้ ทำไมต้องไปผ่านแหล่งที่มา? โดยทั่วไปแล้ว คุณจะต้องระมัดระวังให้มากขึ้นในเรื่องนี้ หัวข้อทดลอง: ที่นี่ ฉันต้องการทราบคำอธิบายประกอบ: @UtilityClass มันสร้างคอนสตรัคเตอร์ส่วนตัวและส่งข้อยกเว้นที่นั่น (เพื่อไม่ให้มือสกปรกจากการสะท้อนกลับเข้าไปที่นี่) และเป็นอย่างดีในตอนต้นของชั้นเรียน มันบอกเราว่ามีวิธีการที่เป็นประโยชน์มากมาย @Delegate ใช้รูปแบบการมอบหมาย หากคุณมีคลาสที่มอบหมายบางสิ่งบางอย่างให้กับคลาสอื่น ในขณะที่ทำการเปลี่ยนแปลงกับบางวิธีเท่านั้น คำอธิบายประกอบนี้จะช่วยให้คุณไม่ต้องทำซ้ำวิธีการ + จะติดตามวิธีการเหล่านั้น หากลบหรือเพิ่มวิธีการออกไป เธอจะสังเกตเห็นมัน เธรดคำอธิบายประกอบแบบทดลอง เว็บไซต์อย่างเป็นทางการของGITHUB เพื่อให้ IDE ทำงานได้ตามปกติกับลอมบอก และไม่เน้นวิธีการว่าไม่มีอยู่จริง คุณต้องติดตั้งปลั๊กอิน บนเว็บไซต์อย่างเป็นทางการมีส่วนการตั้งค่าที่คุณสามารถดูวิธีเชื่อมต่อปลั๊กอินสำหรับแต่ละ IDE ได้ อย่างที่คุณเห็นลอมบอกเป็นที่นิยม > 5,000 ดาวและ > 1,000 ส้อม สปริงใช้ลอมบอกในชั้นเรียนของเธอ หากคุณมีสปริงในโครงการของคุณ ให้มองหามัน บางทีมันอาจจะดึงลอมบอกขึ้นมา คุณก็ไม่รู้หรอก
GO TO FULL VERSION