黑马程序员——Java基础视频笔记(四):泛型

------- android培训java培训、期待与您交流! ---------


今天学习了泛型的相关知识,笔记记录如下,与大家分享:


泛型:JDK 1.5 之后增加的新功能,


泛型,可以解决数据类型的安全性问题;
原理:在类声明的时候,通过一个标识,表示类中某个属性的类型;
        或者是某个方法的返回值及参数类型;
格式:
访问权限 class 类名称<泛型,泛型>{
属性
方法()
}

对象的创建:
类名称<具体类型> 对象名称 = new 类名称<具体类型>


class Point<T>{// T 代表泛类型,可以严格指定传入的参数类型
// 避免产生原因不明的错误
private T x;
private T y;
}


1、构造方法使用泛型:
构造方法可以为类中的属性初始化,如果类中的属性通过泛型指定,
而又需要通过构造方法设置属性内容的时候,那么构造方法的定义与之前并
无不同,不需要像声明类那样,指定泛型;

/*
 * 经纬度
 * int
 * float
 * String
 * 
 * 定义 Object类型。创建 set 和 get 方法		Source——Genterator Getters Setters
 * 
 */
class Point<T>{			// T 代表泛类型,可以严格指定传入的参数类型
	private T x;
	private T y;
	public Object getX() {
		return x;
	}
	public void setX(T x) {
		this.x = x;
	}
	public Object getY() {
		return y;
	}
	public void setY(T y) {
		this.y = y;
	}
}

public class GenericDemo01 {

	public static void main(String[] args) {
		
		Point<String> pt = new Point<String>();
		pt.setX("经度: 10");
		pt.setY("维度: 20");
		System.out.println(pt.getX()+"  "+pt.getY());
/*		Point pc = new Point();
		pc.setX(10); //给Object X 传入10
		pc.setY(10);
		int px = (Integer)pc.getX();  // Integer拆箱、装箱,把 Object转为 int
		int py = (Integer)pc.getY();
		System.out.println("x = " +px+"  \r"+"y = "+py);*/
	}
}

2、指定多个泛类型:
class Gen<T, K>{
private T toke;
private K key;
记住定义 get 和 set
}
class Con2<T>{		//定义泛型
	private T value;
	public Con2(T value) {
		this.value = value;
	}
	public T getValue() {	//获取 实例化时,传入构造器的参数值
		return value;
	}
	public void setValue(T value) {
		this.value = value;
	}
}

public class GenericDemo02 {

	public static void main(String[] args) {
		Con2<String> c2 = new Con2<String>("这是构造方法的泛型用法!");//传入构造器的参数
		System.out.println(c2.getValue());
	}
}

3、通配符的使用 
通配符: ?
格式:   Info<?> i
使用通配符可以让泛型匹配任何格式;

class Gen<T, K>{	//定义两个泛类型
	private T toke;
	private K key;
	public T getToke() {
		return toke;
	}
	public void setToke(T toke) {
		this.toke = toke;
	}
	public K getKey() {
		return key;
	}
	public void setKey(K key) {
		this.key = key;
	}
}

public class GenericDemo03 {

	public static void main(String[] args) {
		Gen<String, Integer> g = new Gen<String, Integer>();
		g.setToke("T is String");
		g.setKey(100);
		System.out.println("Toke is:"+g.getToke()+"\rKey is:"+g.getKey());
	}
}
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">		</span>

4、泛型接口: 
JDK 1.5 之后,不仅仅可以声明泛型类,也可以声明接口,声明泛型类
和声明接口的语法类似,也是在接口名称后面加上<T>
  格式:
interface 接口名称<泛型标识> {
}
接口直接指定泛型的类型,然后子类继承泛型类型

<span style="font-size:18px;">interface GenInter<T>{ //泛型接口
	public void say();
}
// 创建子类  继承接口
class Gin implements GenInter<String>{  // 继承泛型接口,直接指定String类型
	private String info;
	public Gin(String info){
		this.info = info;
	}
	// 复写say()方法
	public void say(){
	}
	//set get
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
}

public class GenericDemo05 {
	public static void main(String[] args) {
		Gin g = new Gin("泛型类");		// 如果在类中没有指定String,而用<T>
										// 则需要在此指定
		System.out.println(g.getInfo());  // g.getInfo() 获取的是 泛型接口的指定类型
	}
}</span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">	</span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">	</span>

5、泛型方法:

1、泛型方法中可以定义泛型参数
此时,参数的类型就是传入的数据类型
2、格式:
访问权限 <泛型标识> 泛型标识 方法名称([泛型标识 参数名称])

class Gener{
	// 创建 泛 型 方 法
	public <T>T tell(T t){
		return t;
	}
}

public class GenericDemo06 {

	public static void main(String[] args) {
		Gener g = new Gener();
		// 直接赋予 字符串
		String s = g.tell("我是泛型打印的~");	//调用 泛型方法
		System.out.println(s);
		// 泛型也可以直接赋予整形
		int i = g.tell(10);  // 泛型,可以传递任意数据类型给 泛型方法
		System.out.println(i);
	}
}

6、泛型数组: GenericDemo07.java

需要和泛型方法搭配使用;

1、在使用泛型方法的时候,也可以传递或返回一个泛型数组

<span style="font-size:18px;">public class GenericDemo07 {
	// 泛型数组 需要配合 泛型方法, 所以定义一个泛型方法
	public static <T> void tell(T arr[]){
		//打印 泛型数组 每个元素
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
	}

	public static void main(String[] args) {
		// 给数组赋值
		String[] arr = {"asd","126","jack"};
		// 调用泛型方法
		tell(arr);
	}	
}</span>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值