Thật không may tôi đã không mã hóa Java trong khoảng năm năm và tôi hoàn toàn không thể nhớ làm thế nào hoặc tại sao mã sau đây đang làm việc.Gọi hàm tạo này với các dấu ngoặc kép sau đây là gì?
Tôi tình cờ gặp một ví dụ tương tự và chia nhỏ nó thành điều này. Sự nhấn mạnh là ở phần bên dưới bình luận: Tôi không nhận được ký hiệu hàm tạo theo sau là khối trong dấu ngoặc kép. Và tiếc là tôi không thể tìm thấy bất cứ điều gì trong tài liệu Java hoặc bằng cách sử dụng Google (những từ nào tôi nên google?).
package syntaxtest;
public class Main {
public static void main(String[] args) {
// What kind of notation is this?
MyTest tester = new MyTest() {{
setName("John Johnson");
}};
System.out.println(tester.getName());
}
}
class MyTest {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Vì vậy, đây là những câu hỏi của tôi:
- như thế nào ký hiệu này/cú pháp gọi là?
- Tôi có thể đọc một số tài liệu về nó ở đâu?
Tôi đoán/hy vọng tôi sẽ tự mình trả lời câu hỏi thứ hai nếu ai đó có thể cung cấp cho tôi câu trả lời cho câu hỏi đầu tiên.
Để làm rõ: Tôi biết đầu ra là John Johnson
;) Nhưng tôi không biết tại sao nó hoạt động.
Khi tôi lần đầu tiên nhìn thấy nó trên Usenet tôi phải nhìn vào nó trong một thời gian trước khi nhận ra những gì đang xảy ra. Một khi bạn biết nó là gì, nó hiển nhiên. –
Tôi thấy mẹo này gọn gàng một thời gian trước đây trên SO, nhưng tôi cũng thấy khá một vài tuyên bố từ chối nói rằng nó rất dễ dàng để phá vỡ các công cụ với nó/không phải là rất đáng tin cậy. Nếu tôi định thử sử dụng nó, tôi chắc chắn sẽ cân nhắc rằng A) Tôi phải giải thích nó cho mọi người xem mã từ đó, và B) Tôi phải làm một số nghiên cứu để hiểu tất cả các tác động của việc sử dụng mẫu này. –
Cảm ơn tất cả các bạn đã trả lời nhanh chóng và hữu ích! – klekker