黑马程序员——泛型

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

 

泛型

 

泛型好处以及使用

泛型是jdk1.5增加的新特性, 用来限定类型

1.      泛型优点:

1)      提高了程序的使用性, 指定泛型后, 取出集合中元素师不需要强转

2)      将原来在运行期处理的问题放到了编译期

3)      提高了代码安全性, 指定泛型的集合只能存储单一类型数据

2.      泛型缺点

指定泛型后集合中不可以随便添加不同类型的元素

3.      类泛型, 方法泛型, 接口泛型

1)      类泛型

class className<T> {

T t;

   public T getT(T t){

            return t;

}

}

这里的T可以是任意类型, 只限于在类内部使用

2)      方法泛型

public <T> T get(T t) {

   return t;

}

这里的T只可以在方法内部使用, 并且要定义在返回值类型前面, 这里的返回值也是T类型的

3)      接口泛型

interface iter<T> {

   public T get();

}

注意: 同时可以定义多个泛型, 用逗号隔开, 泛型的名字可以是任意字符, api中常见的ET代表的是elementType

 

4.      泛型限定通配符

<? extends E> 代表E或者E的子类型

<?> 任意类型

<? super E> 代表E或者E的父类型

 

5.      迭代器使用泛型

Iterator迭代使用了泛型的集合, 必须个Iterator指定泛型, 这样在迭代过程中就不用转换元素类型

 

6.      擦除泛型

这段代码演示了擦除泛型

List<String> list = new ArrayList<String>();

list.add(“a”);

list.add(“b”);

//这时候是不能添加String类型以外的元素

List l = list;         //list指向的对象赋给没有指定泛型的引用

l.add(123); //123成功添加进了集合

System.out.println(list);   //结果是[a, b,123]

 

7.      定义泛型的其它方式

List list1 = new ArrayList<String>(); //所有类型都可以加入

List<String> list2 = new ArrayList(); //指定类型可以加入

         这两种方式都是为了兼容老项目, 平时开发中不建议使用

        

         Jdk1.7后简化方式,ArrayList<String> list = new ArrayList<>();

ArrayList<String>list = new ArrayList<String>(); 功能一样

 

代码示例

class FanTest {
	public static void main(String[] args) {
		// 用类指定的泛型构造方法传值
		Cla<Double> c = new Cla(12.5);
		int i = 10;
		System.out.println(c.a + i); // 打印结果 22.5
		// 调用泛型方法
		System.out.println(c.get(10, '+') + i); // 打印结果 10+10
	}
}

// 实现接口Inter
class Cla<A> implements Inter<String> {
	A a;

	// 创建对象的时候打印a
	Cla(A a) {
		this.a = a;
	}

	// 重写接口中的方法
	public <Integer, Character> String get(Integer i, Character c) {
		return "" + i + c;

	}

}

// 接口指定泛型
interface Inter<T> {
	// 泛型方法
	public <E, B> T get(E e, B b);
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值