0

我目前有一个包含特定 Collection 实现的类,很像以下示例:

public class Bag {

    Set<?> items;

    public <T> Set<T> getItems() {
        return (Set<T>) items;
    }
}

我现在需要概括容器,但我很难理解如何获得类似的 getItems() 方法:

public abstract class AbstractBag<S extends Collection<?>> {

    S items;

    public <T> S<T> getItems(){  // <- does not compile
        return (S<T>) items;
    }
}

最终目的是获得相同的原始袋子,或与其他容器相同的袋子,如下所示:

public class SetBag extends AbstractBag<Set<?>> {}
public class ListBag extends AbstractBag<List<?>> {}

可能吗?谢谢。

编辑:我将提供更多详细信息,说明为什么(我认为)这段代码是必要的。我有一个类需要支持任何类型的属性。这些属性是该特定类型的值的集合(例如一组字符串、一组整数或一组WhateverClass)。我有一个存储与给定键关联的数据的地图。然后可以通过调用键并正确转换返回对象来检索数据。为方便起见,这是通过上面的通用方法完成的。

现在,我需要第二个类,其中集合类型不同。为了避免代码重复(比这里更多的代码),我想创建一个抽象类,该类将集合作为泛型类型(如 AbstractBag),并获得具有不同容器的两个类(例如一个具有列表和一个与 Sets) 为 SetBag 和 ListBag 所做的。

4

1 回答 1

1
public static void main(String[] args) throws Exception
{
    SetBag<Integer> setBag = new SetBag<>();
}

public static abstract class AbstractBag<S extends Collection<?>>
{
    S items;

    public S getItems()
    {
        return items;
    }
}

public static class SetBag<T> extends AbstractBag<Set<T>>
{
}
于 2016-06-24T15:57:27.077 回答