【发布时间】:2012-05-20 00:27:46
【问题描述】:
我想实现以下具有以下层次结构的类:
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>。
你知道我的出路吗?我知道实现我的第一个层次结构的唯一其他方法是使用接口和委托方法。
【问题讨论】:
-
当您的第一个示例似乎可以满足您的需要时,为什么要使用泛型(就像在您的第二个示例中一样)?
-
因为我的第一个示例无法编译。 :-)
-
@NewTalk,这是一个可能很愚蠢的问题:为什么它不能编译?
-
@aioobe 因为 DwellingPropertySetter 类型不是通用的;它不能用参数
参数化
标签: java generics inheritance hierarchy parameterized