java学习----泛型

目录

  1.泛型的定义

  2.泛型的使用

   3.泛型通配符

一、泛型的定义

  泛型是java5的新特性,使用泛型会让程序编写简单安全,在编译的时候就会检查类型是否安全

  定义:所谓泛型就是允许在定义类、接口和方法使用参数类型这个类型形参可以在声明变量、

创建对象、调用方法时动态指定(类型实参)泛型的参数类型只能是引用类型,不能是基本类型

  

二、泛型的使用

  1.泛型接口

    泛型接口格式:

      修饰符 interface 接口名<T...>{}

      泛型接口Demo:

public interface Action<E> {
    //在接口中使用泛型E
    E getE();
    //在接口中使用泛型抽象方法
    <T> T getT(int i);
}

  2.泛型类

    泛型类格式:

      修饰符  class 类名<T...>{

      使用T; }    

        泛型类Demo:

//类上声明泛型E
public class ActionImpl<E>{
    //声明E类型变量
    private E e;
    //使用E类型
    public E getE() {
        // TODO Auto-generated method stub
        return e;
    }
    public ActionImpl(E e){
        this.e = e ;
    }

}

  3.泛型方法

    泛型方法格式:

      修饰符<T...> 返回值 方法名 (参数列表){

        使用T; }

        泛型方法Demo:

public class GenericWay {
    //方法上声明泛型T类型
    public static <T> T get(T t){
        return t;
    }
}

三、泛型通配符

  泛型通配符的符号是?

  普通的泛型与泛型通配符的泛型Class<T>与Class<?>的区别在于:

  Class<T> :在实例化的时候,T需要替换成具体的类型
  在泛型类、方法中可以使用T,还可以操作T类型的变量

  Class<?>:他是通配符,?可以表示任何类型(使用了泛型)

  泛型通配符可以匹配任意类型。

  泛型通配符Demo:

  

import java.util.ArrayList;
import java.util.List;

public class GWC {
    //参数是list,list里的类型可以是任意类型
    public void forList(List<?> l){
        for (Object object : l) {
            System.out.println(object);
        }
    }
    public static void main(String[] args) {
        GWC gwc = new GWC();
        List<Integer> l1 = new ArrayList<>();
        l1.add(1);
        l1.add(2);
        gwc.forList(l1);
        List<String> l2 = new ArrayList<>();
        l2.add("1");
        l2.add("2");
        gwc.forList(l2);
    }
}

    通配符上限

     举个栗子:

        List<? extends Number>  这么声明的数只能是number类型或number类型的子类

      通配符上限Demo:

        

import java.util.ArrayList;
import java.util.List;

public class GWCTop {
    public void forList(List<? extends Number> l){
        for (Number number : l) {
            System.out.println(number);
        }
    }

    public static void main(String[] args) {
        GWCTop gwcTop = new GWCTop();
        //Object 类型是number类型的父类编译报错;
        //List<Object> list = new ArrayList<>();
        //String 类型不是number编译器报错;
        //List<String> list = new ArrayList<>();
        List<Number> list = new ArrayList<>();
        gwcTop.forList(list);
    }
}

    通配符下限

      举个栗子:

        List<? super Number> 这么声明的数只能是number类型或number类型的父类

        通配符下限Demo:

import java.util.ArrayList;
import java.util.List;

public class GWCUnder {
    public void forList(List<? super Number> l){
        for (Object object : l) {
            System.out.println(object);
        }
    }
    public static void main(String[] args) {
        GWCUnder gwcUnder = new GWCUnder();
        //Integer 类型是Number类型的父类,编译不通过;
        //List<Integer> list = new ArrayList<>();
        //String 类型不是Number类型的父类,编译不通过;
        //List<String> list = new ArrayList<>();
        List<Object> list = new ArrayList<>();
        gwcUnder.forList(list);
    }
}

原文地址:https://www.cnblogs.com/bananafish/p/9825704.html

时间: 2024-11-16 21:34:57

java学习----泛型的相关文章

JAVA学习--泛型的使用

* 泛型的使用  * 1.在集合中使用泛型(掌握)  * 2.自定义泛型类.泛型接口.泛型方法(理解 --->使用)  * 3.泛型与继承的关系  * 4.通配符  * ---------------------------------------------------------------------------------------------------------- 1 //1.在集合中没有使用泛型的情况下 2 @Test 3 public void test1(){ 4 List

Java学习笔记_26_泛型概述

                                                               泛型概述 在Java中存入容器中的对象再取出时需要转换类型,因为对象加入容器会被转换成Object类型,而取出时要转换成实际类型.但向  下类型转换都 是存在潜在危险的,因此应该尽量避免它们.  Java的泛型: 所谓泛型就是在定义(类.方法.形参.成员变量等等)的时候,指 定它们为通用类型,也就是数据类型可以是任意类型. 泛型为提高大型程序的类型安全和维护带来了很大的潜

Java学习之道:简述泛型通配符&lt;? extends T&gt;和&lt;? super T&gt;

<? extends T>和<? super T>含有JAVA5.0的新的概念.由于它们的外表导致了很多人误解了它们的用途: 1.<? extends T>首先你很容易误解它为继承于T的所有类的集合,这是大错特错的,相信能看下去你一定见过或用过List<? extends T>吧?为什么我说理解成一个集合是错呢?如果理解成一个集合那为什么不用List<T>来表示?所以<? extends T>不是一个集合,而是T的某一种子类的意思,记

Java学习笔记——泛型

如果T既要继承类又要指定接口,使用下面方式: public class some<T extends Iterable<T> & Comparable<T>>{} Java的泛型不具有共变性(如果B是A的子类,而Node<B>可视为一种Node<A>,则称Node具有共变性),不过可以使用类型通配字符?与extends来声明变量,使达到类似的共变性. Node<Apple> apple = new Node<>(n

2016最新Java学习计划

一.Java学习路线图 二.Java学习路线图--视频篇 六大阶段 学完后目标 知识点 配套免费资源(视频+笔 记+源码+模板) 密码        第一阶段 Java基础 入门 学习周期: 35天 学完后目标: 1.可进行小型应用程序开发 2.对数据库进行基本的增删改查管理 市场价值:¥5000 计算机基础知识 计算机基础.DOS常用命令.Java概述.JDK环境安装配置.环境变量配置.Java程序入门 1.2015年Java基础视频-深入浅出精华版(强烈推荐) 2.历经5年锤炼(适合初学者入

Java 容器 & 泛型:一、认识容器

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 容器是Java语言学习中重要的一部分.泥瓦匠我的感觉是刚开始挺难学的,但等你熟悉它,接触多了,也就"顺理成章"地知道了.Java的容器类主要由两个接口派生而出:Collection和Map. 一.Collection vs Collections 首先,Collection 和 Collections 是两个不同的概念.之所以放在一起,是为了更好的比较.Collection是容器层次结构中

java学习笔记10--泛型总结

java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note10.html,转载

&lt;Java&gt;&lt;学习路线图&gt;

Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了. 但有一些一般的步骤: 1.熟悉一种文本编辑器,比如Vim, Emacs, Notepad++, TextMate等.知道哪些是开源的,哪些是闭源的,哪些要收费.养成不用盗版软件的习惯.2. 安装JDK(建议用你的Linux发行版自带的软件包管理器安装openjdk,过程中可能需要读发行版特定的文档)3. 写一个Java的Hello world程序,并用命令行工具javac编译,再用java命令运行这个程序.过程中熟悉源

转:Java学习路线图

作者: nuanyangyang 标  题: Java学习路线图(整理中,欢迎纠正) 发信站: 北邮人论坛 (Mon Aug 11 19:28:16 2014), 站内   [以下肯定是不完整的列表,欢迎补充]   Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了.   但有一些一般的步骤:   1. 熟悉一种文本编辑器,比如Vim, Emacs, Notepad++, TextMate等.知道哪些是开源的,哪些是闭源的,哪些要收费.养成不用盗版软件的习惯. 2. 安装