-14

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

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

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

4

2 回答 2

4
Class Company<?> 

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

Class Company<T>

文档

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

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

由尖括号 (<>) 分隔的类型参数部分跟在类名之后。它指定类型参数(也称为类型变量)T1、T2、...和Tn。

于 2013-01-25T15:00:47.310 回答
0

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

class Company<T extends Number> {

    void sum(List<T> ls) {
    }
}
于 2013-01-25T15:03:14.403 回答