我想用以下层次结构实现以下类:

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>

你知道我的出路吗?我知道实现我的第一个层次结构的唯一其他方法是使用接口和委托方法。

最佳答案

我认为您已经正确认识到拥有ChickenChickenList 之类的东西是没有意义的,因此您可以创建诸如

class ChickenArrayList extends ArrayList<Chicken>


或者,如果要重用ChickenArrayList中的某些功能,则可能必须使其抽象(通用)并在其之上放置另一个具体的非通用类:

class AbsChickenArrayList<T extends Chicken> extends ArrayList<T>
// and
class ChickenArrayList extends AbsChickenArrayList<Chicken>
class HenArrayList extends AbsChickenArrayList<Hen>


我知道这很冗长,但这是您使用这种18岁左右的语言所能做的最好的事情。

08-18 00:19