黑马程序员技术交流社区
标题:
在函数内定义泛型和参数改成Object到底有多大区别?
[打印本页]
作者:
as604049322
时间:
2014-12-1 10:55
标题:
在函数内定义泛型和参数改成Object到底有多大区别?
我感觉就一个区别,前者不需要强转,后者需要强转。不知道各位还有什么高见。
作者:
FlyFish
时间:
2014-12-1 11:06
泛型好处:1.不必强转
2.解决安全问题
作者:
DamonZh
时间:
2014-12-1 18:47
感觉最重要的还是解决了安全问题吧。
作者:
Cfan_yang
时间:
2014-12-1 18:54
不使用泛型. 会使容器装的类型不一致,会导致程序不安全.
作者:
大大的心
时间:
2014-12-1 22:01
先了解什么是泛型,你就懂了!!!!!!!!!!!!!
泛型:JDK1.5以后出现的新特性,用于解决安全问题,是一个类型安全机制。
int[] arr = new int[3];
arr[0] = 1;
//arr[1] = 3.5;//编译失败,因为数组在创建时就已经明确了类型。
而容器在创建时没有明确类型,容易有安全隐患。这时可以使用泛型来明确容器的类型。
好处:
1.将运行时期出现问题ClassCastException,转移到了编译时期。
方便于程序猿解决问题,让运行时期问题减少,安全。
2.避免了强制转换的麻烦。
泛型格式:通过<>定义要操作的引用数据类型。
在使用java提供的对象时,什么时候使用泛型呢?
通常在集合框架中很常见,只要见到<>就要定义泛型。
其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
泛型定义在类上:
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展。
现在定义泛型来完成扩展。
泛型定义在方法上:
泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所以要操作的类型就已经固定了。
class Demo<T>
{
public void show(T t)
{
System.out.println("show "+t);
}
public void print(T t)
{
System.out.println("print "+t);
}
}
为了不让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上。
特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
class Demo <Q>
{
public <T> void show(T t)//泛型定义在方法上,可以操作不同类型
{
System.out.println("show "+t);
}
public void print(Q t)//泛型类定义的泛型在整个类中有效
{
System.out.println("print "+t);
}
public static <W> void method(W t)
{
System.out.println("method "+t);
}
}
泛型定义在接口上。
通配符 ? 也可以理解为占位符。
泛型限定:
<? extends E>:可以接收E类型和E的子类型。上限。
<? super E>:可以接收E类型或者E的父类型。下限。
只打印Person和Person的子类 用 <? extends Person>
作者:
大大的心
时间:
2014-12-1 22:02
哥们你在黑马了吧,送我点黑马币呗,如果可以的话。嘿嘿。我要来黑马啊。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2