泛型

泛型

Generic:泛型

泛型:广泛的类型。就是给对象指定数据类型的安全机制。泛型JDK1.5 版本以后出现的新特性。用于解决数据的安全问题。是一个安全机制。

好处:

1、将运行时期出现问题 ClassCastException,转移到了编译时期。防便于程序员解决问题。让运行时问题减少,提高安全。

2、避免了强制转换的麻烦。

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

泛型又可以细分为:

1、泛型集合

2、泛型类

3、泛型接口

4、高级泛型

一、泛型集合

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

1)Demo:

package study.part1.day011.collection;
import java.util.ArrayList;
import java.util.Iterator;
public class GenericDemo {
	public static void main(String[] args) {
		//泛型1-----加了“ <> ”。就表示泛型结构,为了定义容器的数据类型,减少出错。
		ArrayList<String> al = new ArrayList<String>();	
		al.add("aaa");
		al.add("xxx");
		al.add("sadf");
		//泛型2-----同时指定迭代器的数据类型
		Iterator<String> it = al.iterator();
		while(it.hasNext()){
			//泛型3-----这时候就不需要强转了,避免了强制转换的麻烦//(String)
			String s = it.next();
			System.out.println(s+":"+s.length());
		}
	}
}

2) 长度比较器

//实现了比较器接口

class LenComparator implements Comparator<String>{
//重写接口中的compare 方法
	@Override
	public int compare(String o1, String o2) {
		int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));
		if(num==0)
			return o2.compareTo(o1);
		return num;
	}
}<span style="color: rgb(63, 95, 191); font-family: Arial, Helvetica, sans-serif;"> </span>

二、泛型类,泛型方法和泛型接口

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

2) 泛型类定义的泛型在整个类中有效。如果被方法使用,那么泛型类的对象要明确操作的具体类型后,所有要操作的类型就已经固定了。为了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。

3) 特殊之处:

静态不可以访问类上定义的泛型。

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

4) 定义泛型类:

1、可以定义泛型类:class DemoGe<T>

2、可以定义泛型方法:public <S> void show(S s)

3、可以同时定义泛型类和泛型方法。

5) 泛型类的 Demo 示例:

package study.part1.day011.collection;
public class GenericDemo4 {
	public static void main(String[] args) {
		DemoGe2 dg = new DemoGe2();
		dg.show("xxx");
		dg.show(124);
		dg.show('a');
		dg.show("[123,xxx,OOO]");
	}
}
/**
 * 定义:泛型类
 * T 随意参数
 * @param <T>
 */
class DemoGe<T>{
	public void show(T t){
		System.out.println("show-->"+t);
	}
	public void print(T t){
		System.out.println("print-->"+t);
	}
}
/**
 * 定义:泛型方法
 * 将泛型定义在方法上
 */
class DemoGe2{
	public <S> void show(S s){
		System.out.println("show-->"+s);
	}
	public <P> void print(P p){
		System.out.println("print-->"+p);
	}
}
/**
 * 定义:泛型类与方法同时存在
 */
class DemoGe3<T>{
	public void show(T s){
		System.out.println("show-->"+s);
	}
	public <P> void print(P p){
		System.out.println("print-->"+p);
	}
	//静态不可以访问类上定义的泛型
	//public static void method(T m){		
	//	System.out.println("method:"+m);
	//}
	public static <M> void method2(M m){
		System.out.println("method2:"+m);
	}
}

6) 泛型接口 Demo:

interface Inter<T>{
	void show(T t);
}
class InterImpl<T> implements Inter<T>{
	@Override
	public void show(T t) {
		System.out.println("show:"+t);
	}
}

三、高级泛型

高级泛型:用 ? 表示,可以接收 ArrayList 中的任意元素。

public static void printColl(ArrayList<?> al){
		Iterator<?> it = al.iterator();
		while(it.hasNext()){
			System.out.println(it.next());	
			//定义泛型不能使用length()这个方法
			//但是可以使用  toString()  方法
		}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值