你这是Java泛型的一种错误用法,叫做“类型隐藏”,不过编译是可以通过的。
你想要的效果其实应该这么写:
class A
{
publicvoid show (String s)
{
System.out.println(s);
}
public static void main(String[] args)
{
A a = new A();
a.show(10); // 此时这里会报错。因为不是String类型的参数
}
}
但是你这么写:
publicvoid show (String s)
// 或者publicvoid show (int s)之类的都一样,都是错误的
就导致了类型隐藏,具体警告信息:The type parameter String is hiding the type String
所以编译器会认为其实你写的是:
publicvoid show (T s)
所以即使参数是int类型,show()方法也能正常工作。
你这里的String并不代表java.lang.String这个类,而是一个泛型名称,它代表传入这个方法的任何类型。换句话说,这里写成