我目前正在学习仿制药,并且很难理解它们的某些方面。我觉得我已经忽视了一些东西,所以这个问题可能听起来很愚蠢。
我知道有:
这是我使用泛型和方法链接的示例代码:
class Clothing <T> {
String material;
String color;
T setMaterial (String material) {
this.material = material;
return (T) this;
}
T setColor (String color) {
this.color = color;
return (T) this;
}
}
class Jeans extends Clothing <Jeans> {
}
class Pants extends Clothing <Pants> {
}
class Executor {
public static void main(String[] args){
Jeans jeansPair = new Jeans().setMaterial("cotton").setColor("green");
}
}
问题是我不明白为什么在子类声明中提供诸如 Jeans 和 Pants 之类的类型,而不是像实例中那样的实例化。主要方法。
如果你提供了这个规则的链接,我将不胜感激 - 我已经查了很多信息,例如有界参数,原始类型,擦除等,但是我找不到我想要的东西。
谢谢
答案 0 :(得分:0)
除此之外:如果您使用的是构建器模式而不是您在此处描述的可变模式,那么您可能更容易使用这些泛型。我只是answered a related question提供了这种构建器结构的示例。
Jeans
和Pants
是没有通用参数的具体类型,这就是为什么在构建它们时你只需说new Jeans()
/ new Pants()
;它们没有调用者可以指定的泛型类型。由于它们也扩展了泛型类型,您可以说:
Clothing<Jeans> jeans = new Jeans()....;
如果您想通过其通用父类型引用该对象。这与任何其他父/子类型关系没有什么不同,例如List<String>
与ArrayList<String>
。这些类只是对泛型类型的值进行硬编码。
您可以想象将Clothing
中的方法分别复制到Jeans
和Pants
,并将T
分别替换为Jeans
和Pants
,如果是帮助您了解这些类正在做什么。
至于为什么在子类声明中提供了类型参数,它是一种风格选择,没有关于何时应该使用它的规则。当你有/可以用作泛型类型的有限数量的类型时,这很好,因为现在调用者不必每次都明确指定类型。然而在&#34;泛型&#34;如果泛型类型表示任意数量的不同具体类型,则此模式是有害的,因为类作者需要为每个给定类型定义新的子类。