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
尽管String
是object
的子类,因为java严格检查类型,编译器可以根据它。
考虑到你的情况,考虑 类型 的争论(比如 arg
)是 Set
而不是 Set of <Type>
。
更清楚arg instanceof Set
>> true
但是
arg instanceof Set<Type>
>> Compilation error
因此编译器会将两者(Set 和 Set)视为同一类型 Set
。
为了理解,在集合的情况下,类型确定 Collection
的内容而不确定类型是 List
还是 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;
}
问题是在上面的这种情况下如何使用重载。 对于第一个参数 在第一种方法中:设置 第二种方法:设置
你误判了方法重载:它关心参数的类型[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
尽管String
是object
的子类,因为java严格检查类型,编译器可以根据它。
考虑到你的情况,考虑 类型 的争论(比如 arg
)是 Set
而不是 Set of <Type>
。
更清楚arg instanceof Set
>> true
但是
arg instanceof Set<Type>
>> Compilation error
因此编译器会将两者(Set 和 Set)视为同一类型 Set
。
为了理解,在集合的情况下,类型确定 Collection
的内容而不确定类型是 List
还是 Set