gpt4 book ai didi

java - 通用方法与通用容器结合使用

转载 作者:行者123 更新时间:2023-12-01 09:46:06 25 4
gpt4 key购买 nike

我当前有一个包含特定 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 一样。

最佳答案

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>>
{
}

关于java - 通用方法与通用容器结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38017288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com