泛型


1 什么是泛型

泛型的本质就是参数化类型,参数化类型重要性在于,允许创建一些类、接口和方法,其
所操作的数据类型被指定为参数。例如我们可以使用泛型创建一个类,在这个类中可以自动使
用不同类型的数据。
class GenericClass<T>{

}
2 泛型的作用
泛型的作用表现在,在没有泛型之前,可以使用Object 来表示或者创建通用的类、接口和
方法,但是这样作带来后果是需要作强制类型转换,而这种转换的条件是开发人员必须预知实
际的参数类型,同时如果强制类型转换错误,编译器在编译时并不检查或提示转换错误,但是
一旦在运行时发现错误则会产生异常,这对于一个程序来说是非常的不安全。
而泛型的作用则恰恰体现在程序编译时就对类型进行检查,同时不必再进行强制类型转换,
因此处理过程得到简化,代码的重用性高,并且又安全。
3 泛型相关概念
在学习如何使用泛型之前,还必须要了解 2 个重要的概念:
1、参数化类型
2、类型变量
参数化类型:参数化类型包含一个类或者接口,以及实际的类型参数列表。
类型变量:是一种非限定性标识符,用来指定类、接口或者方法的类型
4 如何引入泛型
与普通的类不同,使用泛型定义的类可以拥有一个或多个类型的类。下面我们就来看一个
应用了泛型的类的结构:
我们首先来看类型变量的使用:使用大写的英文字母T 作为类型变量的名称,放置在一对
尖括号内,并放在类名的后面;
我们还可以使用类型变量指定方法的返回类型以及域和局部变量的类型
在使用类型变量时还要注意一些规范的使用
1、类型变量要使用大写字母,且比较短
2、在Java 的类库中,使用变量E 来表示集合的元素类型
3、使用字母K 和V 表示关键字和值的类型
4、字母T 表示任意类型
在使用泛型时,使用实际的类型来代替类型变量就可以实例化泛型类型。下面我们来看一
个具体的泛型应用
public class GenericDemo{
public static void main(String[] args) {
GenericClass<String> ge1 = new GenericClass<String>("this is String object");
ge1.showType();
GenericClass<Integer> ge2 = new GenericClass<Integer>(100);
ge2.showType();
}

}

class GenericClass<T>{

public GenericClass(T t){}

}


泛型类:将泛型定义在类上。
class Tool
{
private Q obj;
public  void setObject(Q obj)
{
this.obj = obj;
}
public Q getObject()
{
return obj;
}
}
 
用于放置泛型的类型参数的尖括号应出现在方法的其他所有修饰符之后和在方法的返回类型之前,
  也就是紧邻返回值之前。按照惯例,类型参数通常用单个大写字母表示。
 
  只有引用类型才能作为泛型方法的实际参数,swap(new int[3],3,5);语句会报告编译错误。
----------------------------------------------------------------------------
 
当方法操作的引用数据类型不确定的时候,可以将泛型定义在方法上。
static void swap(E[] a, int i, int j) 
{
E t = a[i];
a[i] = a[j];
a[j] = t;
}
静态方法上的泛型:静态方法无法访问类上定义的泛型。如果静态方法操作的引用数据类型不
确定的时候,必须要将泛型定义在方法上。
public static void function(Q t) 
{
System.out.println("function:"+t);
}
 
注意:
在对泛型类型进行参数化时,类型参数的实例必须是引用类型,不能是基本类型。
当一个变量被声明为泛型时,只能被实例变量、方法和内部类调用,而不能被静态变量和静态方
法调用。因为静态成员是被所有参数化的类所共享的,所以静态成员不应该有类级别的类型参数
 
----------------------------------------------------------------------------
 
泛型接口.
interface Inter
{
void show(T t);
}
class InterImpl implements Inter
{
public void show(R r) 
{
System.out.println("show:"+r);
}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值