表現しようとしている概念は、条件付きコンパイルとして知られています。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() {
}
}
この種の分割により、アプリケーションの有料バージョンを完全に別のアプリケーションに実際に構築できます (すべてのサービス プロバイダーを別のプロジェクトに配置することにより)。