我的代码存在问题。
class A{}
class B extends A{}
public class TestExms {
static String s="-";
public static void main(String[] args) {
A[] aa = new A[2];
B[] ba = new B[2];
sifter(aa);
sifter(ba);
sifter(7);
System.out.println(s);
}
static void sifter(A[]... a2){s+="1";}
static void sifter(B[]... b1){s+="2";}
static void sifter(B[] b1){s+="3";}
static void sifter(Object o){s+="4";}
}
当我运行此代码时,put将是" -434"。
问题是为什么:
当A[] aa = new A[2];
传递给sifter(aa);
时,这个static void sifter(A[]... a2){s+="1";}
不会调用static void sifter(Object o){s+="4";}
。它将调用此方法(A[]... a2)
有人可以解释一下这个吗?
这个.meteor/cordova-plugins
内发生了什么?
答案 0 :(得分:1)
传递给sifter(aa);这个剂量不能称为静态空洞筛子(A [] ... a2){s + =“1”;}。
你在varargs
中给出了错误的语法(似乎很困惑)。
您将自己定义为
static void sifter(A[]... a2) {
s += "1";
}
这意味着您正在收集A[]
的非A
数组。
当您将签名更改为
时,它会起作用static void sifter(A... a2) {
s += "1";
}
写作时
static void sifter(A[]... a2) {
s += "1";
}
相当于
static void sifter(A[] a1, A[] a2, A[] a3) { // and so on
s += "1";
}
因此,当您将A []传递给它时,将While数组视为Object
而不是A[]