3 回答
![?](http://img1.sycdn.imooc.com/545847d40001cbef02200220-100-100.jpg)
TA贡献1852条经验 获得超1个赞
如果将鼠标悬停在Eclipse中的方法调用上,则会看到:
<? extends Number> void Main.max(? extends Number first, ? extends Number second)
也就是说,编译器将泛型类型参数的类型推断为可扩展的内容Number。因此,这两个Integer和Double,延伸Number是用于有效参数max方法。
如果您打印传递给max方法的参数类型:
public static <E> void max(E first , E second)
{
System.out.println(first);
System.out.println(second);
System.out.println (first.getClass ());
System.out.println (second.getClass ());
}
您会看到anInteger和aDouble传递给了该方法:
1
2.0
class java.lang.Integer
class java.lang.Double
![?](http://img1.sycdn.imooc.com/54584d6100015f5802200220-100-100.jpg)
TA贡献1803条经验 获得超3个赞
根据我的理解,有两件事。一种是泛型类,另一种是泛型方法。在这两种情况下,您都可以传递任何类型的值(无论类型如何),也可以传递任何类型的参数。现在,当您创建一个特定的通用激光类型的对象(MyClass<Integer>
不再是通用的)时,使用不同类型的参数进行操作时会出现编译器错误。但是,当您有某种方法(例如将元素添加到)时List<E>
,可以将任何内容添加到此列表中,都不会出现任何编译错误。
添加回答
举报