Tôi muốn đóng gói một đoạn mã hoàn toàn phải chạy trên Java 1.5. Có một phần của mã nơi chương trình có thể được "nâng cao" nếu VM là một máy ảo 1.6.Java: cách dễ nhất để đóng gói cả mã Java 1.5 và 1.6
Về cơ bản nó là phương pháp này:
private long[] findDeadlockedThreads() {
// JDK 1.5 only supports the findMonitorDeadlockedThreads()
// method, so you need to comment out the following three lines
if (mbean.isSynchronizerUsageSupported())
return mbean.findDeadlockedThreads();
else
return mbean.findMonitorDeadlockedThreads();
}
Điều gì sẽ là cách dễ nhất để có điều này biên dịch trên 1.5 và chưa làm phương pháp 1.6 gọi khi trên 1,6?
Trong quá khứ tôi đã làm một cái gì đó tương tự bằng cách biên dịch một lớp 1.6 duy nhất mà tôi sẽ đóng gói với ứng dụng của mình và nhanh chóng sử dụng ClassLoader khi trên 1.6 (vì 1,6 JVM hoàn toàn hòa trộn 0x32 và 0x31 lớp), nhưng Tôi nghĩ rằng đó là một chút overkill (và một chút đau đớn vì trong quá trình xây dựng, bạn phải xây dựng cả 0x31 và 0x32. Lớp tập tin).
Tôi nên làm cách nào nếu tôi muốn biên dịch phương thức trên trên 1,5? Có thể sử dụng phản chiếu nhưng sau đó như thế nào (tôi không quen thuộc ở tất cả với sự phản ánh)
Lưu ý: nếu bạn tò mò, các phương pháp trên xuất phát từ bài viết này: http://www.javaspecialists.eu/archive/Issue130.html
(nhưng tôi không muốn "bình luận ba dòng" như trong bài viết, tôi muốn điều này biên dịch và chạy trên cả 1.5 và 1.6)
@Mnementh: ok nhưng sau đó điều gì sẽ giao diện đang suy nghĩ như ? – SyntaxT3rr0r
Tôi đã chỉnh sửa câu trả lời của mình để bao gồm mã phản chiếu. – Mnementh
@Mnementh: +1 tuyệt vời ... Tôi sẽ cố gắng thiết lập vào chiều nay :) – SyntaxT3rr0r