1

次の階層を持つ次のクラスを実装したいと思います。

public class DwellingPropertySetter
    extends AbstractPropertySetter<Dwelling>

public class HousePropertySetter
    extends DwellingPropertySetter<House>

public class SkyscrapperPropertySetter
    extends HousePropertySetter<Skyscrapper>

残念ながら、このコードはコンパイルされません。それを行う方法は次のとおりです。

public class DwellingPropertySetter<T extends Dwelling>
    extends AbstractPropertySetter<T>

public class HousePropertySetter<T extends House>
    extends DwellingPropertySetter<T>

public class SkyscrapperPropertySetter<T extends Skyscrapper>
    extends HousePropertySetter<T>

しかし、私にとってそれらのextendsキーワードは不要です。を使用するときはいつでもSkyscrapperPropertySetter、型パラメーターを指定する必要があります。これは役に立たず、 のようになりますSkyscrapperPropertySetter<Skyscraper>

私のために抜け道を知っていますか?最初の階層を実現するために私が知っている他の唯一の方法は、インターフェイスとデリゲート メソッドを使用することです。

4

2 に答える 2

1

合理的なことを達成できると思います。あなたが持っている場合

public class DwellingPropertySetter
extends AbstractPropertySetter<Dwelling>

これは、すでにDwellingPropertySetter非ジェネリックを作成していることを意味し、すべてのメソッド シグネチャが を使用しますDwelling。あなたが言うなら

public class DwellingPropertySetter<T extends Dwelling>
extends AbstractPropertySetter<T>

つまり、さまざまなDwellingPropertySetters が存在する可能性があります。実際にはさまざまな s を使用したいので、これを維持したいと考えています。DwellingPropertySetterそれとも、引数のないa が想定されている場所と、異なる でDwelling拡張されたサブクラスの両方が必要であるというあなたの不満ですか? これは、Java Generics では実現できません。DwellingPropertySetter<T>T

于 2012-05-11T11:56:18.227 に答える