私はスマートデバイスの世界をシミュレートしたいと思います。私の計画は、このような階層を作ることでした。特定の型を受け入れるメソッドを実装するためにサブクラスを適用する方法
スマートデバイスがメインインターフェイスです。 スマートデバイスを実装するクラスとして電話と監視。携帯電話を拡張するクラスとして とサムスンとアップル。
最後に、Osという名前のスーパークラスを拡張するiosとandroidという2つのクラスがあります。
私は、SmartDeviceを実装するすべてのデバイス(時計など)にOSのインストールを強制する一方で、appleとsamsungにそれぞれのOsをインストールするようにしたいと考えています。
私はインターフェイスにistallOs(Osテスト)というメソッドを作成しましたが、問題は私がそれがsamsungかappleかどうかわからないので電話レベルでそのメソッドを実装できないことです。
私の階層構造はこの問題には適していないと推測しており、installOsをより低いレベルに移行する必要があります。
この問題の解決方法を教えてください。有界型と、ソリューションに大きなサンプルを含めることができます。
public interface SmartDevice<T extends Os> {
public Boolean installOs(T os);
}
public abstract class Phone implements SmartDevice<T extends Os>{
@Override
public Boolean installOs(T t) {
//Cant implement it here since I dont know what device i am dealing with
}
}
public class ApplePhone extends Phone<ios> {
@Override
public Boolean installOs(ios os) {
//this is an Apple phone so its ok to install ios in it.
System.out.println("Installing Os: "+os.getName());
return true;
}
}
「電話」の具体的なメソッドとして 'installOs'を実装しようとしているようです。なぜ抽象的なままにしないのですか? –
'Phone'を' T'でパラメタ化することもできます: 'class PhoneはSmartDeviceを実装します {...}' –
OSはおそらくグローバルに等しいはずなので、シングルトンとして使うことを考えてください。そのシングルトン(eq:a Set)から特定のOSをSmartDeviceにコピーします。 –