Không, vanilla Java không có các phương pháp mở rộng. Tuy nhiên, Lombok thêm nhiều tính năng hữu ích - bao gồm cả cú pháp phương thức mở rộng - nhờ chú thích và tạo mã byte.
Bạn có thể sử dụng các chú thích @ExtensionMethod để "chuyển đổi" phương pháp tĩnh hiện tại thành các phương pháp mở rộng. Tham số đầu tiên của các phương thức tĩnh về cơ bản trở thành this
. Ví dụ, đây là một mã Java Lombok tăng cường hợp lệ:
import lombok.experimental.ExtensionMethod;
@ExtensionMethod({java.util.Arrays.class, Extensions.class})
public class ExtensionMethodExample {
public String test() {
int[] intArray = {5, 3, 8, 2};
intArray.sort();
String iAmNull = null;
return iAmNull.or("hELlO, WORlD!".toTitleCase());
}
}
class Extensions {
public static <T> T or(T obj, T ifNull) {
return obj != null ? obj : ifNull;
}
public static String toTitleCase(String in) {
if (in.isEmpty()) return in;
return "" + Character.toTitleCase(in.charAt(0)) +
in.substring(1).toLowerCase();
}
}
Lưu ý rằng phương pháp khuyến nông Lombok có thể "gọi" trên các đối tượng null - miễn là phương pháp tĩnh là null-an toàn, NullPointerException
sẽ không được ném , vì điều này về cơ bản được dịch sang gọi phương thức tĩnh. Có - nó đi xuống đường cú pháp, nhưng tôi đoán điều này vẫn còn dễ đọc hơn các phương thức tĩnh thông thường.
Ngoài ra, bạn có thể sử dụng một số ngôn ngữ JVM khác với khả năng tương tác Java, nếu đó là OK trong dự án của bạn. Ví dụ: Kotlin đi kèm với extension methods functionality, cũng như một số tiện ích mở rộng hữu ích đã được xác định trong thư viện chuẩn. Đây là Kotlin and Lombok comparison.
Không có trong Java. Tuy nhiên không phải ai cũng hài lòng với điều đó trong Scala. Vì nó có thể cản trở khả năng đọc, bảo trì. Thông thường, người ta tạo một lớp với các hàm, như XxxUtils hoặc Xxx. Thừa kế có những vấn đề riêng của nó ở đó (các lớp cuối cùng, buộc phải vô dụng mã cũ, tập trung = chỉ là một điểm mở rộng). –