たとえば、両方の WMA パッケージ (1.1 と 2.0) を使用してアプリを開発し、それを WMA 1.1 のみをサポートする古い電話モデルに展開した場合、電話は 2.0 パッケージを無効にしますか?
コードはパッケージ間で何をするように設定されているかについて違いはありませんが、2.0 パッケージはそのコードに追加機能を提供し、最終的に最近の携帯電話に最適です.
Class.forName
デバイスが WMA 2 をサポートしているかどうかに応じて、適切なコードをロードするために使用することを検討します
class SpecificFeatureFactory {
SpecificFeature get(boolean isWma2) {
return (SpecificFeature)Class.forName(isWma2 ? "Rich" : "Poor");
}
}
class Rich implements SpecificFeature {
@Override
long doSomething(String className, Date dateAlarm) throws Exception {
return PushRegistry.registerAlarm(className, dateAlarm);
}
}
class Poor implements SpecificFeature {
@Override
long doSomething(String className, Date dateAlarm) throws Exception {
return -1;
}
}
interface SpecificFeature {
long doSomething(String className, Date dateAlarm) throws Exception;
}
私の記憶によると、WMA仕様では、アプリケーションがそれが1.1
または2.0
.
新しい機能をサポートしていない古い電話ではエラーになります。
プリプロセッサを使用して、ソースコードの1つのパッケージから新旧の電話のさまざまなバージョンをコンパイルします。
サイズが問題にならない場合は、必ずしも前処理を使用する必要はありません。WMA 2.0 にのみ存在するクラスを使用しないと、NoSuchMethodErrors でつまずくだけです。これを行うことを検討してください。
public void doSomeThing()
{
try{
callWMA2_0Method();
}
catch( NoSuchMethodError e )
{
// We're WMA 1.1 then
callWMA1_1Method();
}
}
もちろん、WMA 2.0 に対してのみコンパイルできます。しかし、それは問題ではないはずです