Có cách nào sử dụng các phương pháp ma thuật trong Java như có trong PHP với __call
không?Phương pháp gọi ma thuật trong Java
Ví dụ:
class foo {
@Setter @Getter
int id;
@Getter
Map <String, ClassInFoo> myMap;
protected class ClassInFoo {
@Setter @Getter
String name;
}
@Setter
String defaultKey;
}
Tôi đang sử dụng Project Lombok chú thích cho getter và setter để đơn giản hóa các mã.
Hãy xem xét rằng bản đồ của tôi chứa một số mục được ánh xạ bởi Chuỗi và defaultKey xác định mặc định.
Điều tôi muốn là có thể gọi foo.getName()
sẽ trả về tên mặc định là foo.myMap.get(defaultKey).getName()
.
Lý do tôi không thể viết tất cả các getters theo cách thủ công là lớp Foo trong thực tế được thừa hưởng với generics và lớp bên trong có thể khác nhau.
tôi loại cần một cái gì đó như:
function Object __call(method) {
if (exist_method(this.method)
return this.method();
else
return this.myMap.get(defaultKey).method();
}
Đây có phải là bằng cách nào đó có thể trong Java?
EDIT:
tôi đã thực hiện một thí dụ rõ ràng hơn về những gì tôi đang cố gắng để đạt được ở đây: https://gist.github.com/1864457
Lý do duy nhất để làm điều này là để "viết tắt" các phương pháp trong lớp bên trong.
Bỏ phiếu là một câu hỏi thú vị, nhưng điều này không nên được gắn thẻ OOP. Tính năng bạn quan tâm không phải là đối tượng được định hướng và trên thực tế, thậm chí không nhất thiết phải năng động. – Perception
Nói chung, bạn muốn có getter và setters của riêng bạn mà bạn có thể tạo ra với IDE của bạn. Ví dụ, nó không phải là một ý tưởng tốt để có một getter trả về một bộ sưu tập có thể thay đổi. thay vào đó bạn có thể có 'ClassInFoo getMyMap (String name)' –
Vâng, tôi có thể viết tất cả các getters, nhưng tôi thấy nó trùng lặp và xấu xí. Tôi sẽ chỉ như thế này để những người viết mã HTML của tôi có thể yêu cầu những phương thức này một cách đơn giản. –