java泛型

泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法

 泛型类

泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。最典型的就是各种容器类,如:List、Set、Map。

定义一个泛型类

//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型//在实例化泛型类时,必须指定T的具体类型

public class Generic<T>{

//key这个成员变量的类型为T,T的类型由外部指定

private T key;

public Generic(T key) {

//泛型构造方法形参key的类型也为T,T的类型由外部指定 this.key = key;

}

public T getKey(){

//泛型方法getKey的返回值类型为T,T的类型由外部指定

return key; }

}

使用泛型类

//泛型的类型参数只能是类类型(包括自定义类),不能是简单类型//传入的实参类型需与泛型的类型参数类型相同,即为Integer.

Generic<Integer> genericInteger = new Generic<Integer>(123456);

//传入的实参类型需与泛型的类型参数类型相同,即为String.

Generic<String> genericString = new Generic<String>("key_vlaue");

Log.d("泛型测试","key is " + genericInteger.getKey());

Log.d("泛型测试","key is " + genericString.getKey());

结果

D/泛型测试: key is 123456

D/泛型测试: key is key_vlaue

注意:

定义了泛型类,在使用时不一定要传入实参例如这样写也是对的:

Generic generic = new Generic("111111");

Generic generic1 = new Generic(4444);

泛型的类型参数只能是类类型,不能是简单类型

            不能对确切的泛型类型使用instanceof操作。如下面的操作是非法的,编译时会出错。

if(ex_num instanceof Generic<Number>){   
} 

泛型接口

定义一个泛型接口

public interface Generator<T> {

public T next();

}

实现这个接口

/** * 传入泛型实参时: * 定义一个生产器实现这个接口,虽然我们只创建了一个泛型接口Generator<T> * 但是我们可以为T传入无数个实参,形成无数种类型的Generator接口。 * 在实现类实现泛型接口时,如已将泛型类型传入实参类型,则所有使用泛型的地方都要替换成传入的实参类型 * 即:Generator<T>,public T next();中的的T都要替换成传入的String类型。 */

public class FruitGenerator implements Generator<String> {

private String[] fruits = new String[]{"Apple", "Banana", "Pear"};

@Override public String next() {

Random rand = new Random();

return fruits[rand.nextInt(3)];

}

}

泛型方法

public <T> T getObject(Class<T> t) throws Exception { return t.newInstance();}

泛型通配符

<?>表示能接收任意类型

<? super  Class1>指定类的子类

<? extends Class2>指定类的父类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值