你能帮助我吗

时间:2013-01-25 14:56:27

标签: java

我在java中学过泛型。我可以理解泛型类型,原始类型,有界类型参数和类型推断。我在泛型中学习了通配符。通配符表示?未知类型作为类型参数。虽然我将类定义为Company,但编译器告诉它是一个未定义的类型参数。但我已经通过List方法错误不会发生在这里。你能告诉我在哪里使用通配符及其用途吗?

Class Company<?> // error is occurred at this line
{
    void sum(List<? extends Number> ls) //does not occur here
    { } 
} 

你能解释一下这些之间的区别吗?

2 个答案:

答案 0 :(得分:4)

Class Company<?> 

你不能在泛型类声明中使用?,你必须像这样声明泛型类:

Class Company<T>

来自Documentation

使用以下格式定义泛型类:

class name<T1, T2, ..., Tn> { /* ... */ }
  

接下来是由尖括号(&lt;&gt;)分隔的类型参数部分   班级名称。它指定了类型参数(也称为类型)   变量)T1,T2,...和Tn。

答案 1 :(得分:0)

您必须为该类型指定名称,以便稍后您可以参考它。 也许你想用这种方式:

class Company<T extends Number> {

    void sum(List<T> ls) {
    }
}