三、泛型类
1、格式
class ClassName<datatype>
{
}
2、优点
便于对任何未知的的数据类型进行操作,特别适合用作工具类,避免了强制类型转换的麻烦。
3.示例
import java.util.*; publicclass GenericClass { publicstaticvoid main(String[] args) { Tools<String> tools=new Tools<String>("hello"); System.out.println(tools.getObj()); } } class Tools<T> { private T obj; public Tools(T t) { this.obj=t; } public T getObj() { returnobj; } publicvoid setObj(T obj) { this.obj = obj; } } |
四、泛型方法
当只需要某一个方法可以接收不同类型的参数,而不是整个类的时候,就可以用到泛型方法,它将大大提高程序代码的扩展性。
示例代码如下:
import java.util.*; publicclass GenericMethod { publicstaticvoid main(String[] args) { String s="hello!Nice to meet you!"; Integer inter=3; Show show=new Show(); show.print(s); show.print(inter); } } class Show { public <Q> void print(Q q) { System.out.println(q); } } |
五、静态泛型方法
1、格式
public static <T> methodName(T param)
{
}
2、特点
由于静态方法不可以访问类中的泛型,如果静态方法操作的类型不确定,这可以把泛型定义在静态方法上。
3、示例
publicstatic <Q> void print(Q q)
{
System.out.println(q);
}
六、泛型接口
1、格式
interface Inter<T>
{
void show(T t);
}
2、特点
当接口要操作的数据类型不确定的时候,就可以使用泛型接口。
注意:
当实现接口的类已经确定了接口具体的类型时,创建对象时就不用再指明类型了,如:
class InterImpl implements Inter<String>
{
}
如果实现类仍不知道具体的类型,就要创建对象时指明,如:
class InterImpl<T> implements Inter<T>
{
}
InterImpl<String> im=new InterImpl<String>();
3、示例
import java.util.*; public class Test { public static void main(String[] args) { InterImpl<String> im=new InterImpl<String>(); im.print("hello"); } } interface Inter<T> { void print(T t); } class InterImpl<T> implements Inter<T> { public void print(T s) { System.out.println(s); } } |
七、泛型extends限定
extends E:接收E类型或者E的子类型对象。上限
一般存储对象的时候用。比如添加元素 addAll.
八、泛型super限定
super E:接收E类型或者E的父类型对象。下限。
一般取出对象的时候用。比如比较器。