1

我已经声明了一个 Arraylist,我希望它是一个泛型类型。

ArrayList<T> locker = new ArrayList<T>();

然后我有一个方法 add 也需要是通用的。

public <T extends Gear> boolean add(Gear item)
{

    locker.add(item);// this is giving me compile error => no suitable method found for add(Gear)
    return true;
}

我该如何解决它,我也是泛型类型的新手。

4

2 回答 2

5

如果泛型类型已经在类声明中,则无需在方法中重新声明泛型类型:

public class Locker<T extends Gear> {
    private List<T> locker = new ArrayList<T>();

    public boolean add(T item) {
        locker.add(item);
        return true;
    }
}
于 2012-11-30T12:22:13.157 回答
1

您实际上定义了两种通用参数类型。你陷入了相信它们是相同的经典陷阱,因为它们具有相同的名称。您的第一个泛型参数 (T) 在类级别,并且可以在外面使用,您的第二个(T 扩展 Gear)仅适用于您的 add 方法的上下文。

正如其他人所指出的,您可能应该将您的类级别参数更改为 T extends Gear,并删除方法级别声明。

于 2012-11-30T12:23:44.433 回答