Java 如何仅将方法参数限制为集合的集合和列表类型,而不是映射?

Java 如何仅将方法参数限制为集合的集合和列表类型,而不是映射?,java,generics,collections,Java,Generics,Collections,对于不同类型的参数,我有两种类似的方法 1.用于java.util.Set public static <T> List<? super T> consumeSet(Set<? extends T> collection){ return null; } 我想实现一种常用方法,它只使用List或Set的实现,而不使用Map。我正在尝试下面提到的方法签名。这样做对吗?如果没有,有人能给我建议正确的方法吗?谢谢 public static <T,V

对于不同类型的参数,我有两种类似的方法
1.用于
java.util.Set

public static <T> List<? super T> consumeSet(Set<? extends T> collection){
    return null;
}
我想实现一种常用方法,它只使用
List
Set
的实现,而不使用
Map
。我正在尝试下面提到的方法签名。这样做对吗?如果没有,有人能给我建议正确的方法吗?谢谢

public static <T,V extends Set<T> & List<T>> List<? super T> consumeListAndSetButNotMap(V collection){
        return null;
    }

公共静态列表您可以使用共享
集合
界面。这不接受
Map

谢谢@Sezin,这是解决方案之一。但是如果我想用一个方法签名来实现它呢?这是不可能的吗?你的意思是明确地设置像这样的参数?方法(?extends List&&?extends Set)可能无法在Java中实现。正如amit bhardwaj所说,重载是一种选择。@VishalZanzrukia我认为@Sezin就在这里,要么你使用
集合
,要么重载方法。但是,如果您得到任何东西,请继续尝试。为什么不让方法1(以列表为参数)和方法2(以集合为参数)过载?问题不是寻找需求的替代方案,而是如何在一个方法签名中使用
泛型
?不可能吗?请注意,
V扩展集合和列表
意味着
V
必须同时实现
Set
List
。除了一个不可变的空列表集之外,这在遵守
list.equals
set.equals
的契约时是不可能的。是的,你是对的@JeffreyBosboom,这就是我刚才尝试的。。!但我没有成功。所以我们在寻找正确的方法:)
public static <T,V extends Set<T> & List<T>> List<? super T> consumeListAndSetButNotMap(V collection){
        return null;
    }