与通用容器结合的通用方法

时间:2016-06-24 15:45:19

标签: java generics generic-method

我目前有一个包含特定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),并获取具有不同容器的两个类(例如,一个带有列表和一个用套装)就像SetBag和ListBag一样。

1 个答案:

答案 0 :(得分: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>>
{
}