java基础巩固----泛型

 一.

泛型 的好处:

  1. 把运行时出现 的问题提前至了编译时。
  2. 避免了无谓的强制类型转换。 
 泛型在集合中的应用:
  ArrayList<String> list = new ArrayList<String>();  true    true     true
  ArrayList<Object> list = new ArrayList<String>();  true    true     false
  ArrayList<String> list = new ArrayList<Object>();  false   true     false

 考虑到新老系统兼用性:
  ArrayList   list = new ArrayList<String>();        false   false    true
  ArrayList<String> list = new ArrayList();          true    false    false
 
注意: 在泛型中没有多态的概念,两边的数据必须要一致。 或者是只写一边 的泛型类型。
推荐使用: 两边的数据类型都写上一致的。
public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
//		list.add(123);  //添加了非字符串类型的数据。
		//把集合中的所有元素转换成大写。
		for(int i = 0 ; i < list.size() ; i++){
			String str =  list.get(i);
			System.out.println(str.toUpperCase());
			//System.out.println(list.get(i));
		}	
		
	}

二.

 自定义泛型: 自定义泛型可以理解为是一个数据类型的占位符,或者是理解为是一个数据类型的变量。

 泛型方法:
泛型方法的定义格式: 

修饰符   <声明自定义泛型>返回值类型       函数名(形参列表..){

}
注意:
1. 在方法上的自定义泛型的具体数据类型是调用该方法的时候传入实参的时候确定的。
2. 自定义泛型使用的标识符只要符合标识符的命名规则即可。

 需求: 定义一个函数可以接收任意类型的参数,要求函数的返回值类型与实参的数据类型要一致。

public static void main(String[] args) {
		Integer i= print(12); // Integer
		String str = print("abc");
		//System.out.println(i);
		//System.out.println(str);
	}
	
	//<T> 把T字母声明为自定义 的泛型、
	public static <abc> abc print(abc o){
		
		return o;
	}
三.

 泛型类 
 泛型类的定义格式:
 
  class 类名<声明自定义的泛型>{
 
 
 
注意的事项: 
  1. 在类上自定义的泛型的具体数据类型是在创建对象的时候指定的。
2. 在类上自定义了泛型,如果创建该类的对象时没有指定泛型的具体类型,那么默认是Object类型。

class Worker implements Comparator<Worker>{

	@Override
	public int compare(Worker o1, Worker o2) {
		// TODO Auto-generated method stub
		return 0;
	}			
}

//自定义 一个集合对象
class MyList<T>{
	
	Object[]  arr = new Object[10];	
	int index = 0;
	
	public MyList(){
	
	}
	public void add(T o){
		arr[index++] = o;
	} 
	
}

public class Demo3 {
	
	public static void main(String[] args) {
		MyList<String> list=  new MyList<String>();
		list.add("123");
		
		MyList list2 = new MyList();
		
		new ArrayList<String>();
		
	}
四.

 泛型接口:
 泛型接口的定义格式:
 
  interface 接口名<声明自定义的泛型>{
 
  }
 
在接口上自定义泛型要注意的事项:
  1. 在接口上自定义泛型的具体数据类型是在实现该接口的时候指定的。
  2. 如果一个接口自定义了泛型,在实现该接口的时候没有指定具体的数据类型,那么默认是Object数据类型。 
 
 如果想在创建接口实现类对象的时候再指定接口自定义泛型 的具体数据类型?

interface Dao<T>{
	
	public void add(T t);
	
	public void remove(T t);

}

public class Demo4<T>  implements Dao<T>{

	public static void main(String[] args) {
		new Demo4<String>();
	}

	@Override
	public void add(T t) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void remove(T t) {
		// TODO Auto-generated method stub
		
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值