java中的泛型

目录

1.泛型的定义方式

2.泛型的常规用法

3.泛型的高级用法

4.实例:


1.泛型的定义方式

泛型存在的原因就是为了向下转型的方便。

本质上是程序员定义的安全类型。

语法:类名<T>   

T代表一个类型的名称。

注意:

  1. 泛型的类型参数只能是类类型,不能是简单类型,意思就是只能在类后面加那个玩意
  2. 泛型类型个数可以是多个如:类名<K,V>
  3. 可以使用extends关键字限制泛型的类型
  4. 可以使用通配符限制泛型类型

2.泛型的常规用法

用法:

  1. 单类型的如:类名<T>
  2. 多类型的如:类名<T1,T2>
  3. 可以定义泛型数组如:T[] arrary;
  4. 但是不能用泛型数组建立数组实例,错误例子:T[] arrary=new T[10];就是不对的
  5. 集合类声明容器的元素下面有列表

常用的被泛型化的集合类
集合类泛型定义
ArrayListArrayList<E>
HashMapHashMap<K,V>
HashSetHashSet<E>
VectorVector<E>

3.泛型的高级用法

高级用法:

  1. 限制泛型的可用类型如:class 类名<T extends anyClass>  anyClass是某个接口或者类
  2. 第一条的意思就是,定义的泛型只能是设置固定类或者接口的类型,从而达到限制的目的
  3. 使用类型通配符如:泛型类名称<? extends List>a=null;意思就是类型未知需要使用是进行单独实例化
  4. 泛型类和接口也是可以被继承和实现的

4.实例:

有关转型的例子:

package com.e.cn;


/*
这次的几个实例用到了Object类和包装类
不太清楚的可以看我的之前的文章继承,接口,多态
包装类也会相关的文章
 */

public class Test {
    //Object类是所有类的父类

    private Object object;

    public Object getObject() {
        return object;
    }
    public void setObject(Object object){
        this.object=object;
    }

    public static void main(String[] args) {
        Test test=new Test();
        //向上转型
        test.setObject(new Boolean(true));
        System.out.println(test.getObject());

        test.setObject(new Float(1.2f));
        //向下转型
        Float f=(Float) test.getObject();
        System.out.println(f);

    }

}

结果:

true
1.2

泛型的定义方式例子:

package com.e.cn;



public class Test1<T> {
    private T x;

    public T getX() {
        return x;
    }

    public void setX(T x) {
        this.x = x;
    }

    public static void main(String[] args) {
        //实例化一个Boolean类型的对象
        Test1<Boolean> booleanTest1= new Test1<>();
        //实例化一个Float类型的对象
        Test1<Float> floatTest1=new Test1<>();
        booleanTest1.setX(true);
        floatTest1.setX(1.2f);
        Boolean b=booleanTest1.getX();
        Float f=floatTest1.getX();
        System.out.println(b);
        System.out.println(f);
    }

}

结果:

true
1.2

泛型的常规用法数组类型:

package com.e.cn;

//泛型的数组类型
public class Test2<T> {
    private T[]array;

    public void setArray(T[] array) {
        this.array = array;
    }

    public T[] getArray() {
        return array;
    }

    public static void main(String[] args) {
        Test2<String> test2=new Test2<>();
        String[]strings={"小明","小红","小李","小兰","小刚","小帅","阿伟"};
        test2.setArray(strings);
       //输出
        for (String str:test2.getArray()
             ) {
            System.out.println(str);
        }
    }
}

结果:

小明
小红
小李
小兰
小刚
小帅
阿伟

泛型的常规用法集合类类型:

package com.e.cn;

import java.util.HashMap;
import java.util.Map;

/*
这个程序用到了集合类不知道的可以看我之前的文章集合类
 */

public class Test3 <K,V>{
    //定义一个hashMap的实例
    public Map<K,V>map=new HashMap<>();
    //设置put方法,将对应的键值和键名存入集合对象中
    public void put(K k,V v){
        map.put(k, v);
    }
    public V get(K k){
        return map.get(k);
    }

    public static void main(String[] args) {
        Test3<Integer,String> test3=new Test3<>();
        for (int i=0;i<5;i++){
            test3.put(i,"我的号码是:"+i);
        }
        for(int i=0;i<test3.map.size();i++){
            System.out.println(test3.get(i));
        }
    }

}

结果:

我的号码是:0
我的号码是:1
我的号码是:2
我的号码是:3
我的号码是:4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值