【发布时间】:2016-07-21 08:19:58
【问题描述】:
我目前正在学习泛型,但很难理解它们的某些方面。我觉得我忽略了一些东西,所以这个问题可能听起来很愚蠢。
我知道有:
- 占位符,称为“正式类型参数”。
- 实际的“类型参数”。
这是我的一段示例代码,其中包含有效的泛型和方法链:
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 之类的类型参数,而不是像主类中那样的实例化方法。
如果您提供此规则的链接,我将不胜感激——我已经查找了很多信息,例如有界参数、原始类型、擦除等,但没有完全找到我要查找的内容。
谢谢
【问题讨论】:
-
这是奇怪地重复出现的通用模式,或 c++ 中的模板模式en.wikipedia.org/wiki/Curiously_recurring_template_pattern
-
你可能也想看看这个帖子stackoverflow.com/q/26762955/3280538
-
这也是一种允许抽象基类执行方法链接的方法unquietcode.com/blog/2011/programming/…
-
@flkes 谢谢,我会查看这些链接!
标签: java generics types arguments