忘记您要使用它做什么。我们仅从语言角度看待这一点。
报关单
public <T extends Number> T getSomevalue (boolean tf) {定义一个
T以限制的新类型
Number。这意味着,一个呼叫者只能绑定
Number或任何亚型
Number到
T调用方法时。在该方法中,您不知道该类型可能是什么。
因此,你不能做
T number = new Double(1.0);
因为你不知道那
T是
Double。如果我将方法调用为
Float f = genOp.getSomevalue(true);
T应该是
Float。编译器不能保证类型安全,因此拒绝它(方法内的分配,如果允许的话,
ClassCastException将在运行时抛出)。如果使用强制转换,则是告诉编译器您确定自己在做什么。它会警告您,但会信任您。
同样,声明
public <T> T getSomevalue(boolean tf)
定义一个
T无界的新类型。这意味着您可以将任何类型绑定到
T,这使问题更加严重。我现在可以做
String f = genOp.getSomevalue(true);



