java泛型方法的问题
java泛型方法的问题classApublic<String>voidshow(Strings)system.out.println(s)Aa=newA()a.show(...
java泛型方法的问题class A
public <String>void show (String s )
system.out.println(s)
A a=new A()
a.show(10)
a.show(true)
//为什么参数不是String类型也可以? 展开
public <String>void show (String s )
system.out.println(s)
A a=new A()
a.show(10)
a.show(true)
//为什么参数不是String类型也可以? 展开
2个回答
展开全部
你这是Java泛型的一种错误用法,叫做“类型隐藏”,不过编译是可以通过的。
你想要的效果其实应该这么写:
class A
{
public <T> void show (String s)
{
System.out.println(s);
}
public static void main(String[] args)
{
A a = new A();
a.show(10); // 此时这里会报错。因为不是String类型的参数
}
}
但是你这么写:
public <String> void show (String s)
// 或者public <String> void show (int s)之类的都一样,都是错误的
就导致了类型隐藏,具体警告信息:The type parameter String is hiding the type String
所以编译器会认为其实你写的是:
public <T> void show (T s)
所以即使参数是int类型,show()方法也能正常工作。
展开全部
你这里的String并不代表java.lang.String这个类,而是一个泛型名称,它代表传入这个方法的任何类型。换句话说,这里写成<String>和写成<T>效果是一样的,作用都是给调用这个方法时传递的类型取一个别名String或是T。调用show(10),则编译器通过自动装箱编译成调用show(Integer.valueOf(10));同理,调用show(true),编译成调用show(Boolean.valueOf(true))。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询