Java泛型语句有点复杂? 公共静态类生成器{ 私人int卡路里=0; 公共生成器(){} 公共热量(int val){ 卡路里=val; 返回(T)这个; } public NutritionFacts build(){返回新的NutritionFacts(this);} }
从这个代码片段中,第一行是做什么的,Java泛型语句有点复杂? 公共静态类生成器{ 私人int卡路里=0; 公共生成器(){} 公共热量(int val){ 卡路里=val; 返回(T)这个; } public NutritionFacts build(){返回新的NutritionFacts(this);} },java,generics,Java,Generics,从这个代码片段中,第一行是做什么的,publicstaticclassbuilder?这里有递归吗?这意味着T的类型必须是扩展生成器的类。请参见此示例: public static class Builder<T extends Builder<T>> { private int calories = 0; public Builder() {} public T calories(int val) { calories =
publicstaticclassbuilder
?这里有递归吗?这意味着T
的类型必须是扩展生成器的类。请参见此示例:
public static class Builder<T extends Builder<T>> {
private int calories = 0;
public Builder() {}
public T calories(int val) {
calories = val;
return (T) this;
}
public NutritionFacts build() { return new NutritionFacts(this); }
}
将允许此代码段工作:
public T calories(int val) {
calories = val;
return (T) this;
}
如果carries()
方法是这样声明的(并且构建器没有通用的T
),那么同样的方法将不起作用:
如果尝试以下操作,则会出现编译错误:
public Builder calories(int val) {
calories = val;
return this;
}
看看答案是什么。我从您发送给我的链接复制了该代码段。(T)此
不是类型安全的。递归边界对此没有帮助。递归边界对于其他事情很有用。
NutritionFacts nf = new ABuilder()
.specificMethodForABuilder() // returns ABuilder
.calories(3) // returns also ABuilder
.anotherSpecificMethodForABuilder() // returns again ABuilder
.build();
public Builder calories(int val) {
calories = val;
return this;
}
NutritionFacts nf = new ABuilder()
.specificMethodForABuilder() // returns ABuilder
.calories(3) // returns only Builder
.anotherSpecificMethodForABuilder() // unknown method
.build();