【发布时间】:2016-07-04 17:47:31
【问题描述】:
我是泛型新手,正在查看这个答案:
https://stackoverflow.com/a/17165079/1632141
完美运行,但是我无法理解这部分代码是如何工作的。
public T calories(int val) {
calories = val;
return (T) this;
}
在NutritionFacts的内部类中。
演员如何在这里工作?我在这里期待java.lang.ClassCastException,因为我们将一个纯超类对象转换为子类。
【问题讨论】:
-
“纯超类对象”是什么意思?
this总是以T类型结束。 -
代码在
public static class (GMOFacts.)Builder extends NutritionFacts.Builder<(GMOFacts.)Builder>的上下文中运行。T因此是建造者自己的类型,这使它成为合法的演员。this也不是超类类型,即使代码是在超类中声明的。this始终是具体的运行时(子类)类型。 -
@LouisWasserman:不正确。
this可能不是T类型。 -
@zapl:
this可能不是T。