2011-06-24 15 views
5

私は決まったバージョンでのみ利用可能なコードがたくさんあるプロジェクトを持っています。私がバグを修正すると、それらをすべてのコピーで修正する必要があります。非常に不便です。Java/Androidに#IFと#CONST .NETに相当するものはありますか?

#IF#CONSTはJavaにあります。#IF句がfalseの場合、コードはコンパイルされません。

答えて

6

Java用の「公式の」プリプロセッサはなく、広く使用されているサードパーティのプリプロセッサはありません。

しかし、IDEや他の多くのツールが正しく処理できないハンディキャップを持っていれば、コードに必要なプリプロセッサを使用することはできません。

と言われていますが、は通常にはJavaで必要です。共通のインタフェース(または共通の基底クラスを拡張したクラス)の複数の実装を提供し、それらを実行時に選択することをお勧めします。

存在は、条件付きコンパイルの制限された形は、コンパイル時定数ブーリアンフラグを使用して、ただし、である。

static final DEBUG = false; 

public void frobnicate() { 
    if (DEBUG) { 
    doExpensiveFrobnicationDebugOperation(); 
    } 
    doActualFrobnication(); 
} 

このコードはは、結果として生じるバイトコードにコンパイルされていない高価なメソッド呼び出しをもたらします.classファイル。

+0

それは良い答えです。私の場合よりもずっと助かります+1 –

+1

ありがとう、私はこれについて知っています。 2つ目の利点:コンパイルされたファイルのサイズが小さく2番目:「フリー」のバージョンが「フル」バージョンにクラックされる可能性を減らす(2番目のバージョンはPCのみでAndroidには問題ありません) ) – AndBie

+2

@ AndBie:これらの両方のために、難読化が役立つかもしれません。コードをクラックさせるのが難しくなるわけではありません(私はそれを本当に信じていません)が、デッドコード(決して呼び出されないメソッドさえ)を取り除くことができるからです。これは、通常、フリー/フリーのソフトウェアであっても、難読化ツールがJ2MEコードで使用される理由です。 –

0

Java用のプリプロセッサはありませんので、残念ながら条件付きコンパイルはできません。

+0

本当にですか?それは悪いです:(私はまだ別の答えを待っています、そこには別の解決策があります) – AndBie

関連する問題