java泛型方法的问题

2024-11-18 09:31:12
推荐回答(2个)
回答(1):

你这是Java泛型的一种错误用法,叫做“类型隐藏”,不过编译是可以通过的。

你想要的效果其实应该这么写:

class A
{
    public  void show (String s)
    {
        System.out.println(s);
    }
    
    public static void main(String[] args)
    {
        A a = new A();
        a.show(10);  // 此时这里会报错。因为不是String类型的参数
    }
    
}

但是你这么写:

public  void show (String s)
// 或者public  void show (int s)之类的都一样,都是错误的

就导致了类型隐藏,具体警告信息:The type parameter String is hiding the type String

所以编译器会认为其实你写的是:

public  void show (T s)

所以即使参数是int类型,show()方法也能正常工作。

回答(2):

你这里的String并不代表java.lang.String这个类,而是一个泛型名称,它代表传入这个方法的任何类型。换句话说,这里写成和写成效果是一样的,作用都是给调用这个方法时传递的类型取一个别名String或是T。调用show(10),则编译器通过自动装箱编译成调用show(Integer.valueOf(10));同理,调用show(true),编译成调用show(Boolean.valueOf(true))。