Java 集的一般供应商集
我正在尝试创建一套成套设备供应商。内部集合可以是任何类型(字符串、数字等)。我希望能够将供应商添加到此集合,并检索它们。当我检索到它们时,我知道我不知道供应商返回的是哪种类型的集合,并且我同意它是Java 集的一般供应商集,java,generics,Java,Generics,我正在尝试创建一套成套设备供应商。内部集合可以是任何类型(字符串、数字等)。我希望能够将供应商添加到此集合,并检索它们。当我检索到它们时,我知道我不知道供应商返回的是哪种类型的集合,并且我同意它是供应商。我如何申报这一套 我试过了 一, Set 这是可行的,但我不会对内部集合进行泛型化,这似乎是错误的 二, Set 但是我不能添加供应商 三, Set声明为Set是任何供应商的超类型,Supplier>是任何Set供应商的超类型。而Supplier声明为Set是任何供应商的超类型,Suppli
供应商
。我如何申报这一套
我试过了
一,
Set
这是可行的,但我不会对内部集合进行泛型化,这似乎是错误的
二,
Set
但是我不能添加供应商
三,
Set声明为Set
是任何供应商的超类型,Supplier>
是任何Set供应商的超类型。而Supplier声明为Set
是任何供应商的超类型,Supplier>
是任何Set供应商的超类型。当supplier时,您是否尝试过使创建方法通用Set createSupplierSets()
@daniu我没有这样的方法,因为我必须从不同的地方添加一些集合。因此,它必须使用.add()。唯一的问题是编译时警告。泛型使用“擦除”技术,这意味着所有泛型都被删除并替换为合适的泛型类型-通常是对象
。泛型没有运行时表示。你能接受这些警告吗?你试过让创建方法通用吗Set createSupplierSets()
@daniu我没有这样的方法,因为我必须从不同的地方添加一些集合。因此,它必须使用.add()。唯一的问题是编译时警告。泛型使用“擦除”技术,这意味着所有泛型都被删除并替换为合适的泛型类型-通常是对象
。泛型没有运行时表示。你能接受这些警告吗?很有趣。介意更详细地介绍一下它到底是如何工作的吗?@Sherz更有趣的是,我不知道……试过之后,它就成功了。我也在等待一个真正的答案。我猜我只是个工程师:)问号是“任何类型”的能指。因此,在本例中,任何类型都可以扩展或实现Set。使用此方法的演示。(如果我理解得足够清楚的话。)@MichaelMcKaySupplier
的get()
方法直接返回一个Set
,不需要检查类型和强制转换。非常有趣。介意更详细地介绍一下它到底是如何工作的吗?@Sherz更有趣的是,我不知道……试过之后,它就成功了。我也在等待一个真正的答案。我猜我只是个工程师:)问号是“任何类型”的能指。因此,在本例中,任何类型都可以扩展或实现Set。使用此方法的演示。(如果我理解得足够清楚的话。)@MichaelMcKaySupplier
的get()
方法直接返回一个Set
,不需要检查类型和强制转换。
Set<Supplier<Set>>
Set<Supplier<Set<Object>>>
Set<Supplier<Set<?>>>