美文网首页
Java泛型

Java泛型

作者: 情安 | 来源:发表于2021-06-30 16:24 被阅读0次

1.介绍

public class LinkedList<E>中的<E>它就叫泛型,常用来和集合对象一同使用,所以我们在开始学习集合之前,必须先了解下什么是泛型。而且泛型概念非常重要,它是程序的增强器,它是目前主流的开发方式。
泛型是(Generics)JDK1.5 的一个新特性,其实就是一个『语法糖』,本质上就是编译器为了提供更好的可读性而提供的一种小手段,小技巧,虚拟机层面是不存在所谓『泛型』的概念的。 通过泛型的语法定义,约束集合元素的类型,编译器可以在编译期提供一定的类型安全检查,避免运行时才暴露bug,代码通用性更强。泛型可以提升程序代码的可读性,但它只是一个语法糖(编译后这样的东西就被删除,不出现在最终的源代码中),对于JVM运行时的性能是没有任何影响的。

2.泛型声明和常用名称

2.1声明

泛型可以在接口/类、方法上使用:
java.util.List泛型接口/类:
public interface Collection<E> {}
public class TestC<QQ> {}
泛型方法的声明:
public <E> void print(E e) {}
在方法返回值前声明了一个<E>表示后面出现的E是泛型,而不是普通的java变量。

2.2常用名称

<E> - Element (在集合中使用,因为集合中存放的是元素)
<T> - Type(Java 类)
<K> - Key(键)
<V> - Value(值)
<N> - Number(数值类型)
<?> - 表示不确定的java类型

3用途:编译时类型检查

package cn.tedu.generic;
import java.util.ArrayList;
import java.util.List;
//这个类用来测试泛型的好处
public class Test3_Generic {
    public static void main(String[] args) {
       //1、泛型是怎么来的?--想要模拟数据的数据类型检查
       String[] a = new String[5];
       a[2]="jack";
       a[4]="rose";
       //数组的好处:在编译时期检查数据的类型,如果不是要求的类型会在编译期就报错
//     a[0]=90;
//     a[1]='a';
//     a[3]=9.9;
       //2、泛型通常会结合着集合一起使用
       List list = new ArrayList();
       //没有泛型,数据类型根本没有约束 --太自由!!!
       list.add(10);//可以加整型
       list.add(8.8);//可以加浮点型
       list.add('a');//可以加字符
       list.add("tony");//可以加字符串
       System.out.println(list);
       //3、泛型来了--主要想约束集合中元素的类型<?>
       List<String> list2 = new ArrayList();
       //4、泛型好处:可以把报错时机提前,在编译期就报错,而不是在运行后抛出异常
       //泛型好处:在向集合中添加元素时,会先检查元素的数据类型,不是要求的类型就编译失败
       list2.add("tony");//可以加字符串
//     list2.add(10);
//     list2.add(8.8);
//     list2.add('a');
       //5、<type>--type的值到底怎么写?要看的要存放的数据的类型是啥,type必须是引用类型不能是基本类型
//     List<int> list3 = new ArrayList();//不许出现int这种基本类型
       List<Integer> list3 = new ArrayList();
       list3.add(100);
       list3.add(200);
//     list3.add("300");
    }
}

4.用途:代码通用性更强

传统方式通过重载多态实现,方法同名,参数类型不同。

package cn.tedu.generic;
//这个类用来测试泛型的好处
public class Test4_Generic2 {
  public static void main(String[] args) {
     //打印数组中的元素
     Integer[] a = {1,2,3,4,5};
     print(a);
     String[] b = {"tony","jack","rose","xiongda","xionger"};
     print(b);
     Double[] c = {1.1,2.2,3.3};
     print(c);
  }
  public static void print(Double[] y) {
     for (Double d : y) {
         System.out.println(d);
     }
  }
  public static void print(Integer[] x) {
     //  高效for循环/foreach循环  好处是:比普通for循环的效率高,语法简介   坏处是:没法按照下标获取值
     //for(1 2 : 3){} --3是要遍历的数据  1是遍历得到的数据的类型  2是变量名
     for(Integer m: x){
         System.out.println(m);
     }
  }
  public static void print(String[] z) {
     for (String s : z) {
         System.out.println(s);
     }
  }
}

泛型方式

package cn.tedu.generic;
//这个类用来测试泛型的好处
public class Test4_Generic2 {
    public static void main(String[] args) {
       //打印数组中的元素
       Integer[] a = {1,2,3,4,5};
       String[] b = {"tony","jack","rose","xiongda","xionger"};
       Double[] c = {1.1,2.2,3.3};
       print(a);
       print(b);
       print(c);
    }
    //1、泛型可以实现通用代码的编写,使用E表示元素的类型是Element类型  -- 理解可以神似多态
    //2、泛型的语法要求:如果在方法上使用泛型,必须两处同时出现,一个是参数一个是返回值前的泛型
    public static <E> void print(E[] y) {
       for (E d : y) {
           System.out.println(d);
       }
    }
}

相关文章

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • 第二十八课:泛型

    泛型出现之前 泛型出现之后 Java深度历险(五)——Java泛型

  • Kotlin 泛型

    说起 kotlin 的泛型,就离不开 java 的泛型,首先来看下 java 的泛型,当然比较熟悉 java 泛型...

  • java泛型中类型擦除的一些思考

    java泛型 java泛型介绍 java泛型的参数只可以代表类,不能代表个别对象。由于java泛型的类型参数之实际...

  • Java泛型

    参考:Java知识点总结(Java泛型) 自定义泛型类 自定义泛型接口 非泛型类中定义泛型方法 继承泛型类 通配符...

  • Java泛型—Java语法糖,只在编译有作用,编译后擦出泛型

    Java泛型—Java语法糖,只在编译有作用,编译后擦出泛型 在代码进入和离开的边界处,会处理泛型 Java泛型作...

  • JAVA 核心笔记 || [xxx] 泛型

    泛型 JAVA 的参数化类型 称为 泛型 泛型类的设计 Learn12.java 运行

  • 简单回顾Java泛型之-入门介绍

    什么时候开始有了Java泛型?什么是Java泛型?为什么要引入Java泛型?什么时候用到了泛型?可不可以给泛型下一...

  • Kotlin 泛型

    Kotlin 支持泛型, 语法和 Java 类似。例如,泛型类: 泛型函数: 类型变异 Java 的泛型中,最难理...

  • JAVA-泛型

    JAVA-泛型 sschrodinger 2018/11/15 简介 泛型是Java SE 1.5的新特性,泛型的...

网友评论

      本文标题:Java泛型

      本文链接:https://www.haomeiwen.com/subject/jockultx.html