jdk1.5之后,他可以帮助我们解决参数转换的问题,所谓泛型就是不会再类定义属性的时候指明属性的类型或者在定义参数的 时候指明参数的属性,等到调用的时候再去定义。
范例:泛型的实现
package com.wjx.sayHello;
class Point<T>{
private T x;
private T y;
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
public T getY() {
return y;
}
public void setY(T y) {
this.y = y;
}
public String toString(T x,T y){
return "x="+x+"、y="+y;
}
}
public class TestDemo {
public static void main(String[] args) {
Point <String> p=new Point<String>();
p.setX("东经112度");
p.setY("西京112度");
//如果定义Object 接受数据
// 取数据的时候避免了向下转型的尴尬,不然这边会要String a=(String)p.getX("");
System.out.println(p.toString(p.getX(),p.getY()));
}
}
通配符
在接受参数的时候无法确定参数的类型,我们用"?"来表示,看如下代码示例:
package com.wjx.sayHello;
class Message<T extends Number>{ //设置上限
private T note;
public T getNote() {
return note;
}
public void setNote(T note) {
this.note = note;
}
}
public class TestDemo {
public static void main(String[] args) {
//Message<String> msg=new Message<String>();如果设置泛型上限,这边只能接受number或者number的子类
Message<Integer> msg1=new Message<Integer>();
//msg.setNote("你好世界");
msg1.setNote(66);
//fun(msg);
fun(msg1);
}
public static void fun(Message<?> temp){
//temp.setNote("he");
//通配符他可以接受任何类型正是因为不知道数据类型,所以不予许修改
//通配符设置上限 ?extends 类名 例如 ? extends Number,只能够设置子类
//通配符设置下限?super 类 只可以修饰参数,只能够设置父类
System.out.println(temp.getNote());
}
}
泛型接口
除了定义在类中,泛型也可以定义在接口内
package com.wjx.sayHello;
interface IMessage<T>{
public void print(T t);
}
class IMessageImpl<T> implements IMessage<T>{
@Override
public void print(T t) {
System.out.println(t);
}
}
/*
* 两种方式,第一种在类实现接口的时候定义好数据类型,第二种是在客户端声明类型
*/
//class IMessageImpl implements IMessage<String>{
//
// @Override
// public void print(String t) {
// // TODO Auto-generated method stub
// System.out.println(t);
//
// }
//
//}
public class TestDemo {
public static void main(String[] args) {
IMessage<String> msg=new IMessageImpl<String>();
IMessage<Integer> msg1=new IMessageImpl<Integer>();
msg.print("hello world");
msg1.print(20);
}
}
泛型方法
package com.wjx.sayHello;
public class TestDemo {
public static void main(String[] args) {
Integer data[]={1,2,3,4,5};
for(int temp:data){
System.out.println(temp);
}
String str[]={"2","hello","world","leo"};
for(String temp:str){
System.out.println(temp);
}
}
//<T>是描述泛型的标记
public static <T> T[] fun(T... args){
return args;
}
}