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类型也可以?
展开
 我来答
百度网友289c0c0
2018-07-31 · TA获得超过4184个赞
知道大有可为答主
回答量:1531
采纳率:89%
帮助的人:630万
展开全部

你这是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()方法也能正常工作。

GTA小鸡
高粉答主

2018-07-31 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
你这里的String并不代表java.lang.String这个类,而是一个泛型名称,它代表传入这个方法的任何类型。换句话说,这里写成<String>和写成<T>效果是一样的,作用都是给调用这个方法时传递的类型取一个别名String或是T。调用show(10),则编译器通过自动装箱编译成调用show(Integer.valueOf(10));同理,调用show(true),编译成调用show(Boolean.valueOf(true))。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式