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

时间:2015-10-15 01:18:58

标签: java set overloading

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

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

在上面这种情况下我怎么能使用过载呢? 对于第一个参数 在第一种方法中:设置        第二种方法:设置

1 个答案:

答案 0 :(得分:2)

您错误判断方法重载:它关注参数[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&gt;&gt; true
arg instanceof Set<Type>&gt;&gt; Compilation error

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

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