我正在尝试创建一组套装供应商。内部集可以是任何类型(字符串,数字等)。我希望能够将供应商添加到此集合并检索它们。当我检索它们时,我知道我不知道什么类型的Set供应商正在返回,并且它可以是Supplier<Set<Object>>
。我该如何声明这个Set?
我试过
1
Set<Supplier<Set>>
哪个有效,但后来我没有通用化内部Set,这似乎不对
2
Set<Supplier<Set<Object>>>
但是我无法添加Supplier<Set<String>>
3
Set<Supplier<Set<?>>>
但是我仍然无法添加以上内容(并且我无法从该套装中取出任何东西,我想)
有什么想法吗?
答案 0 :(得分:4)
声明为Set<Supplier<? extends Set<?>>>
。
我认为它起作用的原因是因为Supplier<?>
是任何供应商的超类型,Supplier<? extends Set<?>>
是任何集合供应商的超类型。虽然Supplier<Set<?>>
与任何具体类型的集合供应商的类型不同,例如Supplier<Set<String>>
。