泛型

一、泛型在集合中的应用

1.泛型的好处

  • 把运行时出现的问题提前至了编译时
  • 避免了无谓的强制类型转换

2.泛型在集合中的应用

通常这样写:

  • ArrayList<String> list = ArrayList<String>();

考虑到新老系统的兼容性,也可以这样写:

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

3,注意

  • 应用时两边的数据类型必须一样,或者只写一边的泛型类型,最好两边都写。

二、泛型方法

1.自定义泛型:自定义泛型可以理解为是一个数据类型的占位符,可理解为一个数据类型的变量,只不过没有规定是什么类型的。

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

//<T> 把 T字母 字符声明为自定义的泛型,

public staic <T> T print(T a){

}

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

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

}

4.注意

  •  在方法中自定义泛型的具体数据类型是调用该方法是传入的实参确定,他会自动把T替换成实参中传过来的数
  • 自定义泛型使用的标识符不是必须用T,只用满足标识符的命名规则就行。
三、泛型类(在类上自定义泛型)

1.泛型类的定义格式:

 class 类名<声明自定义的泛型>{

}

2.例子

//自定义一个集合对象,但是不能确定其中存储的的数据是什么类型
//a方法:

class MyList{
  Object[] arr;  //Object类型的数组是可以添加任意类型的数据的
  public MyList(){
    arr = new Object[10];
  }
public void add(Object o){
    arr[index++] = o;
}

//b方法:(还不是恒明白,)

class MyList<T>{
  Object[] arr; 
  public MyList(){
    arr = new Object[10];
  }
public void add(T o){
    arr[index++] = o;
}

3.注意:

  • 再类上自定义的泛型的具体数据类型是在创建对象时指定的。
  • 在类上自定义了泛型,若果创建对象时没有指定泛型具体类型,默认是Object类型。

四、泛型接口

1.定义格式:

  interface 接口名<声明自定义的泛型>{

}

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 } }
原文地址:https://www.cnblogs.com/sjxbg/p/5535679.html