JAVA泛型应用

java泛型的基本应用

  • 格式:集合类<引用类型> 变量名 = new 集合类<类类型>()
  • 声明好泛型类型之后,集合中只能存放特定的类型元素
  • 泛型类型必须是引用类型
  • 使用泛型后去出的元素不需要类型转换

泛型方法

  • 需求:写一个函数,调用者传递什么类型的变量,该函数就返回什么类型的变量
实现一
/*
由于无法确定具体传递什么类型的数据,那么方法的形参就定义为Object类型,
返回值就是Object类型缺点:但是使用函数时需要强制类型转换
*/
private Object getDate(Object obj){
    return obj;
}
实现二

使用泛型的自定义来解决以上问题
泛型:就是将类型当做变量处理。规范泛型的定义一般是一个大写的字母

public<泛型的声明> 返回值类型 函数名(泛型 变量名){

}

public static void main(String[] args){
    int[] arr = {1,2,3,4,5};
    new Demo().getData(5);
}

public<T> T getData(T data){
    return data;
}
注意
  • 静态方法不可以使用类中定义的泛型,因为类中的泛型需要在对象初始化时指定具体类型,而静态类优先对象的存在。那么类中的静态方法就需要单独进行泛型声明,声明泛型一定要写在static后,返回类型之前
    创建对象的时候要指定泛型的具体类型
  • 1、 创建对象的时候要指定泛型的具体类型。
  • 2、穿件队形是可以不指定泛型的具体类型(和创建集合对象一样)。默认Object,例如我们使用集合储存元素的时候没有使用泛型,那么参数的类型就是Object
  • 3、类上面声明的泛型只能用于非静态成员函数,如果静态函数需要使用泛型,那么需要在函数上独立声明。
  • 4、如果建立对象后指定了泛型的具体类型,那么该对象操作方法时,这些方法只能操作一种数据类型。
  • 5、既可以在类上的泛型声明,也可以在同时在该类的方法中声明泛型
泛型练习
/**
 * Created by SunMing on 2016/9/18.
 */
public class Demo7 {

    public static void main(String[] args) {
        Father<String> father = new Father<String>("lalala");
        System.out.println(father.getT());

        Father<Integer> father2 = new Father<Integer>(65536);
        System.out.println(father2.getT());
    }
}
class Father<T>{
    private T t;

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }

    public Father(){

    }
    public Father(T t){
        this.t = t;
    }
}

带子类的实现

//子类指定了具体的类型
class Son extends Father<String>{

}
//子类也需要使用泛型
class Son3<T> extends Father<T>{

}
//错误写法,父类上定义有泛型需要进行处理
class Son2 extends Father<T>{

}

泛型接口

/**
 * Created by SunMing on 2016/9/18.
 */
public class Demo8 {

    public static void main(String[] args){
        MyInter<String> my = new MyInter<String>();
        my.print("发发");

        Myinter2 my2 = new Myinter2();
        my2.print("只能传字符串");
    }
}

//定义接口
interface Inter<T>{
    void print(T t);
}

// 实现不知为何类型时可以这样定义
class MyInter<T> implements Inter<T>{

    @Override
    public void print(T t) {
        System.out.println(t);
    }
}

//使用接口时明确具体类型。
class Myinter2 implements Inter<String>{

    @Override
    public void print(String s) {
        System.out.println(s);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值