[解決済み] Java の条件付きコンパイル:コードチャンクをコンパイルしないようにするには?
質問
私のプロジェクトでは、コンパイルと実行にJava 1.6が必要です。現在、私はそれをJava 1.5で動作させるための要件を持っています(マーケティング側から)。私は、エラーなしでJava 1.5でコンパイルするために、メソッド本体(戻り値の型と引数は同じまま)を置き換えたいと思っています。
詳細
というユーティリティクラスを持っています。
OS
これはOSに特有のものをすべてカプセル化するものです。このメソッドには
public static void openFile(java.io.File file) throws java.io.IOException {
// open the file using java.awt.Desktop
...
}
を使えば、ダブルクリックのようにファイルを開くことができます (
start
Windowsのコマンドまたは
open
Mac OS Xのコマンドに相当)。このメソッドはJava 1.5でコンパイルできないので、コンパイル時に除外し、別のメソッドで
run32dll
Windowsの場合、または
open
を使用してMac OS Xで使用します。
Runtime.exec
.
質問です。どうすればいいのでしょうか?アノテーションはここで役に立ちますか?
注:私はantを使用しており、2つのjavaファイルを作成することができます。
OS4J5.java
と
OS4J6.java
を含むことになります。
OS
クラスに、Java 1.5と1.6に必要なコードをコピーし、そのうちの1つを
OS.java
の内容をコンパイル前に置き換える(あるいは、醜い方法ですが。
OS.java
しかし、私はそれをしたくない、もし他の方法があるならば。
さらに詳しく説明すると、C言語では
ifdef, ifndef
Python ではコンパイルが不要で、ある機能をチェックするには
hasattr
などがありますが、Common Lispでは
#+feature
. Javaでも同じようなものがあるのでしょうか?
発見 この記事 が、参考にならないようです。
どんな助けでも大歓迎です。
解決方法を教えてください。
Javaでは条件付きコンパイルはサポートされていないんだ。
通常、アプリの OS 固有の部分を
Interface
を使用し、実行時にOSの種類を検出し実装をロードします。
Class.forName(String)
.
あなたの場合、この2つをコンパイルできない理由はないでしょう。
OS*
(そしてアプリ全体も)Java 1.6で
-source 1.5 -target 1.5
を取得するためのファクトリーメソッドで
OS
クラス(これは今やインターフェイスであろう)が
java.awt.Desktop
クラスが利用可能であれば、正しいバージョンをロードします。
のようなものです。
public interface OS {
void openFile(java.io.File file) throws java.io.IOException;
}
public class OSFactory {
public static OS create(){
try{
Class.forName("java.awt.Desktop");
return new OSJ6();
}catch(Exception e){
//fall back
return new OSJ5();
}
}
}
関連
-
[解決済み] 一部の入力ファイルが非推奨のAPIを使用またはオーバーライドしている
-
[解決済み] android.support.v4.app.FragmentActivity' で 'TAG' がプライベートアクセスされている。
-
[解決済み] Javaでのスキャナが動作しない
-
[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] Javaからフォルダ内の全ファイルを読み込むには?
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
-
[解決済み】EclipseのコードフォーマッターをJavaコードの特定のセクションでオフにする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Firebase クラスにシリアライズするプロパティが見つからない
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] XX:MaxDirectMemorySizeの既定値
-
[解決済み] 環境変数JAVA_OPTSの使い方を教えてください。
-
[解決済み] Java Genericメソッドをstaticにするには?
-
[解決済み] HTTP ステータス 500 - サーブレットクラス pkg.coreServlet のインスタンス化に失敗しました。
-
[解決済み] SubclipseとJavaHLのインストールで頭を悩ます
-
[解決済み] Java: getInstanceとStaticの比較
-
[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について