我运行了这段代码,输出告诉你没有保证(至少如果类在不同的层次结构分支上有多个共同的祖先)
老实说,我不知道这种魔力背后的原因,但我只是不能将其作为评论发布
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
interface A{}
interface B{}
class AB implements A, B {}
class BA implements A, B {}
public static void main (String[] args) throws java.lang.Exception
{
foo(new AB(), new BA());
foo2(new AB(), new BA());
}
static <T> void foo(T... arr) {
System.out.println(arr.getClass() == A[].class);
}
static <T> void foo2(T... arr) {
System.out.println(arr.getClass() == B[].class);
}
}
输出
true
false
更多奇怪的事情:
如果在 之前声明 ,则结果与结果相反:interface B
interface A
false
true
更改方法调用中的参数顺序,方法声明顺序和块中接口的顺序对我不起作用(1.8.0_51)。implements