Hãy xem xét hai lớp Java sau:vô hiệu hóa thời gian biên dịch phụ thuộc kiểm tra khi biên soạn các lớp Java
a.) class Test { void foo(Object foobar) { } }
b.) class Test { void foo(pkg.not.in.classpath.FooBar foobar) { } }
Hơn nữa, giả sử rằng pkg.not.in.classpath.FooBar
không được tìm thấy trong classpath.
Lớp đầu tiên sẽ biên dịch tiền phạt bằng cách sử dụng javac chuẩn.
Tuy nhiên, lớp thứ hai sẽ không biên dịch và javac sẽ cung cấp cho bạn thông báo lỗi "package pkg.not.in.classpath does not exist"
.
Các thông báo lỗi là tốt đẹp trong trường hợp chung kể từ khi kiểm tra sự phụ thuộc của bạn cho phép trình biên dịch để cho bạn biết nếu bạn có một số tranh luận phương pháp sai vv
khi tốt đẹp và hữu ích kiểm tra này phụ thuộc vào thời gian biên dịch là AFAIK không phải nghiêm chỉnh cần thiết để tạo tệp lớp Java trong ví dụ trên.
Bạn có thể cho bất kỳ ví dụ mà nó sẽ là về mặt kỹ thuật không thể tạo ra một tập tin lớp Java hợp lệ mà không thực hiện biên dịch kiểm tra phụ thuộc thời gian?
Bạn có biết cách nào để hướng dẫn javac hoặc bất kỳ trình biên dịch Java nào khác bỏ qua việc kiểm tra phụ thuộc thời gian biên dịch không?
Hãy đảm bảo câu trả lời của bạn giải quyết cả hai câu hỏi.
Cách duy nhất (thực hiện) là tra cứu một 'MethodHandle', lưu nó trong trường' static final' và sử dụng 'invokeExact()' với các gợi ý kiểu chính xác trên MH.Đó là khá tất nhiên khá tẻ nhạt nếu bạn cần nó cho hơn một số phương pháp. – the8472