泛型

泛型

泛型即“参数化类型。”就是将声明时需要指定的类型也定义为参数。在具体使用时,再给定具体的类型。这样不用创建新类型,就可以由泛型来实现参数的多类型。
泛型有三种,分为泛型接口,泛型类,和泛型方法。

泛型接口

// 定义泛型接口
public interface Generator<T>{
public T next();
}

//当一个类实现此接口时,如果不传入类型实参(即给定 T 的具体类型),则这个类也必须定义为泛型类。
class FunctionGenerator<T> implements Generator<T>{
@override
public T next(){
return null;
}
}
//当实现泛型接口的类传入类型实参时,原接口中声明的方法的类型形参T也被确定了,在实现此方法时,必须替换为相应的类型实参。
class FunctionGenerator implements Generator<String>{
@override
public String next(){
String s="aaa";
return s;
}
}

泛型类

泛型类的定义形式如下:

// An highlighted block
class 类名<类型形参:就像变量名,可以随便写>{
private 类型形参 变量名;
}
//具体例子
class A<T>{
//泛型变量
private T bianliang;
//泛型构造方法
public A(T t){
this.bianliang=t;
}
//泛型方法(此为泛型类中的方法,泛型为类的声明中给定)
public T getBianliang(){
return bianliang;
}
}

在定义泛型类时如果传入了类型实参,则相应的类中定义的属性,方法,构造函数中就不能使用类型形参(但可以自定义泛型方法)。相反地,如果定义了泛型类且并未指定类型,其中的方法与构造函数可以不传入类型实参,这样在使用时就可以传入任意类型的参数

// An highlighted block
public class A<T>{
    public T a;
   Integer f(){
        return null;
    }
    public A(T t){
        this.a=t;
        System.out.println(a);
    }

    public static void main(String[] args) {
       A a1= new A("abcc");
        A a2= new A(1);
        A a3= new A(2.2);
        A a4= new A(true);
    }

}
//运行结果
abcc
1
2.2
true

泛型方法

泛型方法不等同于泛型类中的方法。一个方法是否是泛型方法只取决于它自身的定义,泛型方法定义如下:

// 是否为泛型方法只取决于访问修饰符(public)与返回值类型(void)之间的<T>,如果这个<T>存在,即为泛型方法。
public <T> void method(){

}
//当确定为泛型方法,即在方法中可以任意使用此类型形参。
//此方法可以返回泛型类型,以及使用泛型参数。
public <T> T method(T t){

}

泛型方法的具体情况比较复杂,我会单独写一篇笔记进行总结。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值