泛 型

一、什么是泛型

泛型是指定一个表示类型的变量,即“参数化类型”。用泛型来代替某个实际的类型,而后通过实际调用时传入或推导的类型来对泛型进行替换,以达到代码复用的目的。

比如在一个类中定义一个String类型的变量,这时候只要是String类型,我们都能够正常运行,但我们如果突然需要一个Integer类型 的变量时,这个时候我们只能重新创建一个类,把 value 改为 Integer类型。随着业务的增加,会导致设置的类越来越多,因此有了泛型的。

只要将我们平常的代码简单修改

public class demo<T> {
    private T t;
    public T getT() {
        return t;
    }
    public void setT(T t) {
        this.t = t;
    }
}
//demo<T>表示此类型是由外部调用本部类指定的。T也可以用其他字母代替。

二、泛型类和泛型对象

泛型类

就是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。只有用户使用该类的时候,该类所属的类型才能明确。

格式:

[访问权限] class 类名称<泛型类型标识1,泛型类型标识2,…,泛型类型标识n>

[访问权限]  泛型类型标识 变量名称;

[访问权限]  泛型类型标识 方法名称;

[访问权限]  返回值类型声明  方法名称(泛型类型标识 变量名称){};

创建泛型对象

定义好泛型类后,我么就可以创建泛型对象

 格式:

类名称<参数化类型> 对象名称 = new 类名称<参数化类型>();

 代码

ArrayList<Integer> list = new ArrayList<Integer>();
//这时只能再list集合中添加Interger类型的变量,如果添加其他类型变量,编译不通过     
list.add(1);// 添加字符串对象                             
list.add(2);                                       
for (Integer str : list) {// 遍历集合                  
    System.out.println(str);                       
}                                                  

泛型方法

public class demo {                          
    public static void main(String[] args) {      
        Dog dog = new Dog();                      
        dog.show("hello");//hello                 
        dog.show(12);//12                         
        dog.show(23.4);//23.5                     
    }                                             
}                                                 
class Dog{                                        
    String eat;                                   
    Integer age;                                  
    //定义了泛型方法,该方法的参数在调用时才会被确认,传入的是什么参数,返回值就是什么类型的                     
    public <T> void show(T t){                    
        System.out.println(t);                    
    }                                             
}                                                 

泛型接口

格式

[访问权限] interface 接口名称<泛型标识> {}

Interface Animal <T>{

...

}

定义泛型接口的子类

第一种,直接在子类实现的接口中明确给出泛型类型

//定义接口
public interface Inter <T>{
    public abstract void show(T t);
}
//接口实现类
public class InterImpl implements Inter<String>{
    //在实现的时候确认参数类型
    @Override
    public void show(String s) {
        System.out.println(s);
    }
}

第二种,直接在子类后声明泛型

//定义接口
public interface Inter <T>{
    public abstract void show(T t);
}
//接口实现类
public class InterImpl<T> implements Inter<T>{
    //在实现的时候确认参数类型
    @Override
    public void show(T t) {
        System.out.println(t);
    }
}
public class demo{
      public static void main(String[] args) {
          Inter<String> inter = new InterImpl();
          inter.show("hello");//hello
          Inter<Integer> ii = new InterImpl<>();
          ii.show(12);//12
      }
}

三、类型通配符

使用类型通配符:?

如果使用通配符“?”接收泛型对象,则通配符“?”修饰的对象只能接收,不能修改,也就是不能设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值