1

コンパイラのトリックを使用して、アプリの無料版と有料版にさまざまな機能を含めることができないかと考えていました。例えば:

public static final boolean paid = false;

if (paid){
    runPaidMethod();
}
else {
    runFreeMethod();
}

コンパイラはそれを見て、if ステートメントの最初の分岐は必要ないのでコンパイルしないと言います。さらに、プログラムを見て、それrunPaidMethod()がどこからも参照されていないことを確認し、それを削除する必要があります。

したがって、問題は次のとおりです。このフラグを使用して、一度無料でコンパイルし、フラグを交換してから、有料で再度コンパイルすることは可能ですか?

4

2 に答える 2

1

表現しようとしている概念は、条件付きコンパイルとして知られています。C や C++ などの言語では、プリプロセッサ ディレクティブとコンパイラ フラグを組み合わせてこれを実現します。かなり粗い例:

#ifdef PAID
    runPaidMethod();
#else
    runFreeMethod();
#endif

良くも悪くもどうでもいいことですが、この種の条件付きコンパイルは Java には存在しません。しかし、それはあなたがやろうとしていることが達成できないと言っているのではなく、よりオブジェクト指向の方法で考える必要があるだけです. 求めているものを実装するそのような方法の 1 つは、主要なサービス プロバイダーをインターフェイスとして定義し、有料版と無料版の実装を提供することです。何かのようなもの:

public interface UsefulService {
    public void someMethod();
    public void otherMethod();
}

public class BaseUsefulService {
   // Common functionality here
   public void otherMethod() {
   }
}

public class FreeUsefulService {
    public void someMethod() {
    }
}

public class PaidUsefulService {
   public void someMethod() {
   }
}

この種の分割により、アプリケーションの有料バージョンを完全に別のアプリケーションに実際に構築できます (すべてのサービス プロバイダーを別のプロジェクトに配置することにより)。

于 2012-06-23T17:52:29.910 に答える