java中的通用参数类型匹配

时间:2015-05-14 10:12:06

标签: java generics

我不明白为什么以下代码会编译。

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>编译。

请解释。

1 个答案:

答案 0 :(得分:7)

您已两次声明泛型类型T

  • in 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>());
            }
        };
    }

}