Java 使用 Set 类型参数的方法重载

Java method overload with Set type parameter

众所周知,如果我们想要重载一个现有的方法,我们应该以某种方式改变参数的数量或参数的类型。这是我的困境,我想使用重载和集类型绑定不同的子类型

private boolean usedOverlap(Set<Variable> useVars, Set<Value> list) {
    // TODO Auto-generated method stub
    for(Variable use:useVars){
        if(list.contains(use.getValue()))
            return true;
    }
    return false;
}

private boolean usedOverlap(Set<Value>vaset_A,Set<Value>vaset_B){
    Set<Value>intersection = new HashSet<Value>(vaset_A);
    intersection.retainAll(vaset_B);
    if(intersection.isEmpty())
        return false;
    else
        return true;
}

问题是在上面的这种情况下如何使用重载。 对于第一个参数 在第一种方法中:设置 第二种方法:设置

你误判了方法重载:它关心参数的类型[Set]而不是它的泛型子类型[Set<Integer>]。 此外,泛型只在 compile time.

之前发挥作用

更新:

Java 是一种严格类型检查的语言。所以下面的重载是可能的。

 public boolean overloadable(String b) {
       //....
        return false;
    }

    public boolean overloadable(Object a){
      //...
            return true;
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        System.out.println(sample.overloadable(12));//call Object arguement method
        System.out.println(sample.overloadable("12"));
    }

输出为:

true
false

尽管Stringobject的子类,因为java严格检查类型,编译器可以根据它。

考虑到你的情况,考虑 类型 的争论(比如 arg)是 Set 而不是 Set of <Type>

更清楚arg instanceof Set >> true 但是
arg instanceof Set<Type> >> Compilation error

因此编译器会将两者(Set 和 Set)视为同一类型 Set

为了理解,在集合的情况下,类型确定 Collection 的内容而不确定类型是 List 还是 Set