泛型程序设计

1、泛型程序设计的起源?

泛型是JDK1.5增加的新特性。

2、使用泛型的好处?

使用泛型机制编写的代码比那些杂乱使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。

  1. public class GenericTest01 {

    public static void main(String[] args) {

    /*
    // 创建一个集合
    List list = new ArrayList();

    // 创建对象
    Cat c = new Cat();
    Bird b = new Bird();

    // 添加对象
    list.add(c);
    list.add(b);

    // 遍历集合
    Iterator integer = list.iterator();
    while (integer.hasNext()) {
    Object obj = integer.next();
    if (obj instanceof Animal) {
    Animal a = (Animal)obj;
    a.move();
    }
    }*/

    // 创建集合,使用泛型
    List<Animal> list = new ArrayList<Animal>();
    Cat c = new Cat();
    Bird b = new Bird();

    list.add(c);
    list.add(b);

    // 获取迭代器
    // 这个表示迭代器迭代的是Animal类型
    Iterator<Animal> iterator = list.iterator();
    while (iterator.hasNext()) {
    Animal a = iterator.next();
    a.move();
    }
      }
    }
  1. class Animal {
    public void move() {
    System.out.println("动物在移动");
    }
    }

    class Cat extends Animal {
    public void CatchMouse() {
    System.out.println("猫抓老鼠!");
    }
    }

    class Bird extends Animal {
    public void Fly() {
    System.out.println("鸟儿在飞翔!");
    }
    }

    3、泛型的缺点是什么?
    使集合中的元素单一,但是在大多数业务中,集合中的元素是统一的,所以这种新特性逐渐被大家认可。

    4、砖石表达式
  1. JDK8之后引入了:自动类型推断机制。(又称为砖石表达式)
  1. public class GenericTest02 {
    public static void main(String[] args) {

    // 使用泛型,创建一个Animal类型的数组
    List<Animal> list = new ArrayList<>();

    // 添加元素
    list.add(new Animal());
    list.add(new Cat());
    list.add(new Bird());

    // 遍历集合
    // 不使用泛型默认返回的是Object类型
    Iterator<Animal> iterator = list.iterator();
    while (iterator.hasNext()) {
    Animal animal = iterator.next();
    animal.move();
    }

    List<String> stringList = new ArrayList();

    // 类型不匹配
    // stringList.add(new Animal());
    // stringList.add(123);
    // stringList.add(new Object());

    // 添加元素
    stringList.add("http://www.baidu.com");
    stringList.add("http://www.4399.com");
    stringList.add("http://www.7k7k.com");

    // 遍历

    Iterator<String> it = stringList.iterator();
    while (it.hasNext()) {

    /* 如果没有使用泛型,以下代码就得这样写
    Object o = it.next();
    if (o instanceof String) {
    String s1 = (String) o;
    String newString = s1.substring(7);
    System.out.println(newString);
    }*/
    // 直接通过迭代器获取了String类型的数据
    String s = it.next();
    String s1 = (String) s;
    String newString = s1.substring(7);
    System.out.println(newString);
    }
    }
    }
  1. 5、自定义泛型

    自定义泛型的时候,尖括号中是一个标识符,可以随便写。
  1. java源代码中经常出现的是:<E>和<T> EElement首字母大写,TTyte首字母大写
  1.  
  1. public class GenericTest03<A> {
    public void doSome(A o) {
    System.out.println(o);
    }

    public static void main(String[] args) {

    GenericTest03<String> gt1 = new GenericTest03<>();
    // 类型不匹配
    // gt1.doSome(100);

    gt1.doSome("abc");

    GenericTest03<Integer> gt2 = new GenericTest03<>();
    // 类型不匹配
    // gt2.doSome("abc");

    gt2.doSome(100);

    GenericTest03 gt3 = new GenericTest03<>();
    gt3.doSome(new Object());

    MyIterator<String> mi = new MyIterator<>();
    String s1 = mi.get();

    MyIterator<Animal> mi2 = new MyIterator<>();
    Animal a1 = mi2.get();
    }
    }

    class MyIterator<T> {
    public T get() {
    return null;
    }
    }
  1.  
  1.  

  1.  
  1.  


Java泛型机制的更多相关文章

  1. 浅析Java 泛型

    泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念.下面,根据以下内容,我们总结下在Java中使用泛型. 泛型使用的意义 什么是泛型 泛型类 泛型方法 泛型接口 泛型擦 ...

  2. java泛型笔记一

    名词:泛型类 泛型方法 原始类型 子类型 版本 参数化类型 通配符类型 超类通配 子类通配 全通配 定义变量 创建对象 检查模板 类型实参 类型形参 补充 替代语法特征:尖括号括起来的类型参数表 // ...

  3. 用了这么多年的 Java 泛型,你对它到底有多了解?

    作为一个 Java 程序员,日常编程早就离不开泛型.泛型自从 JDK1.5 引进之后,真的非常提高生产力.一个简单的泛型 T,寥寥几行代码, 就可以让我们在使用过程中动态替换成任何想要的类型,再也不用 ...

  4. Java泛型反射机制(二)

    /** * @author Administrator * 好处:泛型:1安全 2减少代码重用率 */ package com.test; import java.lang.reflect.Metho ...

  5. JAVA反射机制--怎么不受泛型束缚给数组赋值

    在Java中,声明数组的时候我们经常会写泛型限制用户输入或者获取的数据.如:ArrayList<String> list = new ArrayList<>(); String ...

  6. C++泛型 && Java泛型实现机制

    C++泛型  C++泛型跟虚函数的运行时多态机制不同,泛型支持的静态多态,当类型信息可得的时候,利用编译期多态能够获得最大的效率和灵活性.当具体的类型信息不可得,就必须诉诸运行期多态了,即虚函数支持的 ...

  7. Java泛型(11):潜在类型机制

    泛型的目标之一就是能够编写尽可能广泛应用的代码. 为了实现这一点,我们需要各种途径来放松对我们的代码将要作用的类型所做的限制,同时不丢失静态类型检查的好处.即写出更加泛化的代码. Java泛型看起来是 ...

  8. Java进阶 | 泛型机制与反射原理

    一.泛型的概念 1.基础案例 泛型在Java中的应用非常广泛,最常见则是在集合容器中,先看下基础用法: public class Generic01 { public static void main ...

  9. java基础---泛型机制

    从java5 开始增加泛型机制,用于明确集合中可以放入的元素类型,只在编译时期有效,运行时不区分是什么类型. 格式:<数据类型> 泛型的本质是参数化类型,让数据类型作为参数传递,E相当于形 ...

随机推荐

  1. [leetcode]120.Triangle三角矩阵从顶到底的最小路径和

    Given a triangle, find the minimum path sum from top to bottom.Each step you may move to adjacent nu ...

  2. ThreadLocal源码深度剖析

    ThreadLocal源码深度剖析 ThreadLocal的作用 ThreadLocal的作用是提供线程内的局部变量,说白了,就是在各线程内部创建一个变量的副本,相比于使用各种锁机制访问变量,Thre ...

  3. idea或者java远程提交spark任务到yarn,Exception1

    spark通過idea远程提交job到yarn: Caused by: java.lang.ClassCastException: cannot assign instance of scala.co ...

  4. instanceof和isInstance的区别

    instanceof 是一个操作符(类似new, ==等) ( Object reference variable ) instanceof (class/interface type) if(a i ...

  5. pthread 读写锁

    pthread 读写锁 (Read Write Lock, rwlock) 把对共享资源的访问者分为读者和写者,读者仅仅对共享资源进行读访问,写者仅仅对共享资源进行写操作. 如果使用互斥量 mutex ...

  6. 【C++】《C++ Primer 》第十五章

    第十五章 面向对象程序设计 一.OOP:概述 面向对象程序设计(OOP)的核心思想是数据抽象.继承和动态绑定. 通过使用数据抽象,可以将类的接口和实现分离. 使用继承,可以定义相似的类型并对其相似关系 ...

  7. Java 设置Excel条件格式(高亮条件值、应用单元格值/公式/数据条等类型)

    概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条 ...

  8. Netty与NIO

    初识Netty Netty是由JBoss提供的一个Java的开源框架,是GitHub上的独立项目. Netty是一个异步的,基于事件驱动的网络应用框架,用于快速开发高性能.高可靠的网络IO程序. Ne ...

  9. leetcode-222完全二叉树的节点个数

    题目 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置. ...

  10. 【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)

    关键字说明 什么是 Azure Active Directory?Azure Active Directory(Azure AD, AAD) 是 Microsoft 的基于云的标识和访问管理服务,可帮 ...