泛型的本质是参数化类型。即所操作的数据类型被指定为一个参数。

1.jdk 1.5/1.6 必须显式的写出泛型的类型。

2.jdk 1.7/1.8 不必显式的写出泛型的类型。

一、泛型声明

可以用<T>、<K,V>、<T  extends  Number>等进行泛型的声明。其中,<T  extends  Number>的声明方式限定了T的范围,T只能为 Number的子类。

1.参数类型用在类的创建中,泛型类。

2.参数类型用在接口的创建中,泛型接口。

3.参数类型用在方法的创建中,泛型方法。注意泛型<T>的声明位置,在方法的修饰符之后,返回值类型之前。

package me;

public class GeneTest<T> {

    private T date;

    public T getDate() {
return date;
} public void setDate(T date) {
this.date = date;
} }

泛型类

package me;

public interface InteGene<E> {

    public E getData();

    public void setData(E e);

}

泛型接口

package me;

public class MeGeneTest {

    public static <T> void Gene(T test) {

        System.out.println(test);
} public <T> T getDate(T test) { return test;
} }

泛型方法

二、? ,类型通配符

通配符的几种形式:

1.无限定通配符,<?>。

2.上限通配符,<?  extends  Number>。表示参数类型只能是Number的子类。

3.下限通配符,<?  supper Number>。表示参数类型只能是Number的父类。

package me;

public class Test {

    public static void main(String[] args) {

        GeneTest<String> gts = new GeneTest<>();
gts.setDate("this is a test !");
print(gts); GeneTest<Integer> gti = new GeneTest<>();
gti.setDate(123);
print(gti);
} public static void print(GeneTest<?> s){ System.out.println(s.getDate());
} }

通配符的使用

上面的示例代码中,print()方法的参数使用了通配符,得以传入泛型类GeneTest<T>任意类型的参数。如果,将通配符改成具体的一种类型,例如String类型。那print()方法就只能传入泛型类GeneTest<String>类型的参数。

泛型的声明表明,在类、接口、方法的创建中,要使用一个未知的数据类型,将来可能会用到的一种数据类型。它可以是Integer类型,也可以是String类型。就把它的类型定义成 T 、K 或者是V等等。

在实例化的时候,就必须声明T具体是一个什么类型。

在定义泛型对象的使用方法时,还不知道T是什么类型,它可能是String类型,也可能是Integer类型。如果,把T定义成一个确定的泛型数据类型,参数就只能是这种数据类型。此时,就用到了通配符代替确定的泛型数据类型。

使用泛型、通配符提高了代码的复用性。

把一个对象分为声明、使用两部分的话。泛型侧重于类型的声明上代码复用,通配符则侧重于使用上的代码复用。泛型用于定义内部数据类型的不确定性,通配符则用于定义使用的对象类型不确定性。

JAVA 泛型与通配符的使用的更多相关文章

  1. Java泛型和通配符那点事

    泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法 ...

  2. java 泛型的通配符和限定

    package cn.sasa.demo1; import java.util.ArrayList; import java.util.Collection; import java.util.Ite ...

  3. Java泛型之通配符

    原文点此链接 使用通配符的原因:Java中的数组是协变的,但是泛型不支持协变. 数组的协变 首先了解下什么是数组的协变,看下面的例子: Number[] nums = new Integer[10]; ...

  4. Java 泛型、通配符? 解惑

    Java 泛型通配符?解惑 分类: JAVA 2014-05-05 15:53 2799人阅读 评论(4) 收藏 举报 泛型通配符上界下界无界 目录(?)[+] 转自:http://www.linux ...

  5. Java 泛型和通配符解惑

    转自:http://www.linuxidc.com/Linux/2013-10/90928.htm T  有类型 ?  未知类型 一.通配符的上界 既然知道List<Cat>并不是Lis ...

  6. java 泛型与通配符(?)

    泛型应用于泛型类或泛型方法的声明. 如类GenericTest public class GenericTest<T> { private T item; public void set( ...

  7. java泛型之通配符?

    一.在说泛型通配符" ?" 之前先讲几个概念 1.里氏替换原则(Liskov Substitution Principle, LSP): 定义:所有引用基类(父类)的地方必须能透明 ...

  8. java 泛型: 通配符? 和 指定类型 T

    1. T通常用于类后面和 方法修饰符(返回值前面)后面 ,所以在使用之前必须确定类型,即新建实例时要制定具体类型, 而?通配符通常用于变量 ,在使用时给定即可 ? extends A  :  通配符上 ...

  9. [转]JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别

    原文地址:https://www.jianshu.com/p/95f349258afb 1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被 ...

随机推荐

  1. 基于eBox的LTC1446驱动

    LTC1446 是linear出品的双通道12bit轨对轨DAC芯片,采用SPI接口,内部基准电压,满量程输出4.095v,单电源供电(4.5-5v).8Pin封装.            使用时非常 ...

  2. 扩大Tomcat内存

    在Eclipse里选:Window->Preference->Installed JREs->Edit(选中jre),在Default VM Arguments里输入-Xms256m ...

  3. spring环境搭建需要的插件-------Spring Tool Suite™ Downloads

    下载地址http://spring.io/tools/sts/all 上面的是集成了eclipse的,所以文件比较大,下面的是单独的插件,下载之后打开eclipse,help->installN ...

  4. Prince2是怎么考试的?

    Prince2是怎么考试的? 在前几年,对于项目经理来讲关注的很多是单项目管理的工具技术模板,谈论最多的是,进度延期,成本超支,范围蔓延等等!有一个不成文的形态就是--去考个PMP吧!一时间PMP成为 ...

  5. js与jsp

    jsp :j2ee 中的一样模版技术,运行于服务器端javascript :一种运行于客户端的脚本语言,动态性.JavaScript是一种采用事件驱动的脚本语言,它不需要经过Web服务器就可以对用户的 ...

  6. Mac OS下pip安装 pillow

    sudo pip install pil报错如下:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Develo ...

  7. bootstrap-table 加载不了数据问题总结

    1.Without server-side pagination data-side-pagination="client"(bs-table的设置) 服务器端代码: @Reque ...

  8. 使用GIt向github上传代码

    github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.这对于一般人来说公共仓库就已经足够了. 1.注册账户以及创建仓库     要想 ...

  9. wifipineapple使用教程

    1.把开关拨到右边 如果有灯亮说明有电 4个灯全亮说明电量是满的 以此类推 如果一个也不亮说明没电了需要用充电器充电 2.把开关拨到左边打开wifi的开关  会开启一个wifi大概一分钟左右会有wif ...

  10. 前端工程师的PS默认工作区

    右侧依次是信息.图层.历史记录,如下图: