我不明白为什么以下代码会编译。
public class House<T> {
static <T> void live(House<T> a) {}
static {
new House<Integer>() {
{
this.live(new House<String>());
}
};
}
}
新房中的静态代码中的类型T
是一个整数,因此live
函数所需的参数类型为House<Integer>
,而它与House<String>
编译。
请解释。
答案 0 :(得分:7)
您已两次声明泛型类型T
:
public class House<T>
static <T> void live(House<T> a)
这意味着它们是两种不同的泛型类型(它们彼此无关,即使它们具有相同的名称)。
换句话说,您的代码与
相同public class House<T> {
static <E> void live(House<E> a) {}
static {
new House<Integer>() {
{
this.live(new House<String>());
}
};
}
}