泛型

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;
	 }
	
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值