我在java中学过泛型。我可以理解泛型类型,原始类型,有界类型参数和类型推断。我在泛型中学习了通配符。通配符表示?
未知类型作为类型参数。虽然我将类定义为Company
,但编译器告诉它是一个未定义的类型参数。但我已经通过List
方法错误不会发生在这里。你能告诉我在哪里使用通配符及其用途吗?
Class Company<?> // error is occurred at this line
{
void sum(List<? extends Number> ls) //does not occur here
{ }
}
你能解释一下这些之间的区别吗?
答案 0 :(得分:4)
Class Company<?>
你不能在泛型类声明中使用?
,你必须像这样声明泛型类:
Class Company<T>
使用以下格式定义泛型类:
class name<T1, T2, ..., Tn> { /* ... */ }
接下来是由尖括号(&lt;&gt;)分隔的类型参数部分 班级名称。它指定了类型参数(也称为类型) 变量)T1,T2,...和Tn。
答案 1 :(得分:0)
您必须为该类型指定名称,以便稍后您可以参考它。 也许你想用这种方式:
class Company<T extends Number> {
void sum(List<T> ls) {
}
}