0

我有两种扩展通用 ArrayList 类型的类型。

public class BuyersGuideResponse extends ArrayList<BuyersGuideItem>
{

    private void checkStatusAttributes(){ ... }
    private void addItems(){ ... }
}

public class CatalogEngineTypeResponse extends ArrayList<CatalogEngineType>
{

    private void checkStatusAttributes(){ ... }
    private void addItems(){ ... }
}

checkStatusAttributes 方法在两种类型中都是相同的,所以我想创建一个抽象的通用中间类型。我目前有

public class ArrayListResponse extends ArrayList<Object>
{

// no implementation

}

public class BuyersGuideResponse<BuyersGuideItem> extends ArrayListResponse
{

    // implementation unchanged
    ...
    private void addItems()
    {
        NodeList nodes = doc.getElementsByTagName(CatalogConst.BUYERS_GUIDE_ITEM_NODE_NAME);
        for(int i = 0; i < nodes.getLength(); i++)
        {
            add(new BuyersGuideItem(nodes.item(i)));
        }
        ...
    }
    ...
}

编译时产生以下错误:

BuyersGuideResponse.java:51: error: unexpected type

        add(new BuyersGuideItem(nodes.item(i)));
                ^

    required: class

    found: type parameter BuyersGuideItem

    where BuyersGuideItem is a type-variable

        BuyersGuideItem extends Object declared in BuyersGuideItem.java

我哪里错了?

4

1 回答 1

4

本声明

public class BuyersGuideResponse<BuyersGuideItem> extends ArrayListResponse

相当于

public class BuyersGuideResponse<T> extends ArrayListResponse

所以你可以看到为什么那行不通。它会尝试做

 add(new T(nodes.item(i)));

类型参数隐藏了类型的名称。

我会做以下事情

public class ArrayListResponse<T> extends ArrayList<T>

为您的父类。

public class BuyersGuideResponse extends ArrayListResponse<BuyersGuideItem>

为您的孩子实施。这BuyersGuideItem是一个类型参数,不会隐藏类型名称。

于 2013-09-12T15:27:41.387 回答