我目前有一个包含特定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一样。
答案 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>>
{
}