private void viewDetail()
{
Map map1 = new HashMap();
Map<String,Object> map2 = new HashMap<String,Object>();
Map<Object,Object> map3 = new HashMap<Object,Object>();
Map<String,String> map4 = new HashMap<String,String>();
test1(map1);
test1(map2);
test1(map3);//编译错误
test1(map4);//编译错误
}
private void test1(Map<String,Object> map)
{
}
String不是可以自动转换为Object吗?为什么map4 做参数报错呢?
有以下区别:
1、表示对象不同
在泛型这里 Object 就只表示Object 不能表示所有对象
2、两种泛型的定义不同
前者是能够确定的泛型,后者是不能够确定的泛型
3、判定方式不同
因为这是两种不同的定义,所以在判定方法上存在不同
泛型的定义主要有以下两种:
1.在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义)
2.在程序编码中一些包含参数的类。其参数可以代表类或对象等等。(人们大多把这称作模板)不论使用哪个定义,泛型的参数在真正使用泛型时都必须作出指明。
扩展资料:
.NET Framework 的泛型
泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型及其方法的参数类型出现。泛型方法可以将其类型参数用作其返回值的类型或者其某个形参的类型。
由于.NET Framework 泛型的类型参数之实际类型在运行时均不会被消除,运行速度会因为类型转换的次数减少而加快。
参考资料来源:百度百科-泛型
有以下区别:
1、表示对象不同
在泛型中,对象仅表示对象不能代表所有对象。
2、两种泛型的定义不同
前者是可以确定的通用类型,后者是无法确定的通用类型。
3、判定方式不同
因为这是两个不同的定义,所以判断方法有所不同。
泛型有两个主要定义:
(1)有些类型在程序编码中包含类型参数,即通用参数只能表示类,而不能表示单个对象。
(2)某些类在程序代码中包含参数,它的参数可以表示类或对象,等等。无论使用哪种定义,都必须在实际使用泛型时指定其参数。
扩展资料:
.NET Framework 的泛型:
泛型是带有占位符(类型参数)的类,结构,接口和方法。 这些占位符是由类,结构,接口和方法存储或使用的一种或多种类型的占位符。 通用集合类可以将类型参数用作其存储的对象类型的占位符; 类型参数显示为其字段的类型和方法的参数类型。
泛型方法可以将其类型参数用作其返回值的类型或者其某个形参的类型。
由于.NET Framework泛型的类型参数的实际类型不会在运行时消除,因此,由于减少了类型转换的次数,因此将加快运行速度。
参考资料来源:
本回答被网友采纳