Java1.5で絶対に実行する必要のあるコードをパッケージ化したい。VMが1.6VMの場合、プログラムを「拡張」できるコードの一部があります。
基本的にはこの方法です:
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();
}
これを1.5でコンパイルし、1.6で1.6メソッド呼び出しを行う最も簡単な方法は何でしょうか。
過去に、アプリと一緒にパッケージ化し、1.6のときにClassLoaderを使用してインスタンス化する一意の1.6クラスをコンパイルすることで同様のことを行いました(1.6 JVMは0x32クラスと0x31クラスを完全にうまく混合できるため)が、これは少しやり過ぎです(ビルドプロセス中に0x31と0x32の両方の.classファイルをビルドする必要があるため少し苦痛です)。
上記のメソッドを1.5でコンパイルしたい場合は、どうすればよいですか?たぶんリフレクションを使用しますが、どのように(私はリフレクションにまったく精通していません)
注:興味がある場合は、上記の方法は次の記事からのものです:http ://www.javaspecialists.eu/archive/Issue130.html
(ただし、記事のように「3行にコメント」したくないので、これをコンパイルして1.5と1.6の両方で実行したい)