日期:2014-05-20  浏览次数:20723 次

泛型的疑惑
java不支持泛型数组
那为什么我这样做编译器没有提示错误

public <T> T[] test(T args[])
{
return null;
}

很是不解啊,帮帮忙呗

------解决方案--------------------
你这个定义的是泛型的方法,不是泛型数组,所以才没有报错啊
泛型:jdk1.5版本以后出现新特性。用于解决安全问题,是一个安全机制。
ArrayList<String> al=new ArrayList<String>();<String>就是泛型。


好处:
1、 将运行时期出现的问题ClassCastException,转移到了编译时期。方便于程序员解决问题,让运行时期问题减少,安全。
2、 避免了强制转换麻烦。


泛型格式:通过<>来定义要操作的引用数据类型。

在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见。
只要见到<>就要定义泛型。
其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。


什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展,现在定义泛型来完成扩展

泛型方法:
class Demo
{
public <T> void show(T t)
{
System.out.println("show"+t);
}
public <Q> void print(Q q)
{
System.out.println("print:"+q);
}
}
class GenericDemo4
{
public static void main(String[] args) 
{
Demo d=new Demo();
d.show("haha");
d.show(new Integer(44));
}
}

特殊之处:

静态方法不可以访问类上定义的泛型。
如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。如:

Public static <W> void method(W w)
{
}

? 通配符。也可以理解为占位符。

泛型的限定:
? extends E:可以接收E类型或者E的子类型。 上限。
? super E:可以接收E类型或者E的父类型。下限。