写点什么

Java 泛型

作者:Yeats_Liao
  • 2022 年 10 月 10 日
    江西
  • 本文字数:1360 字

    阅读完需:约 4 分钟

一、说明

  • 泛型(generics)本质是参数化类型,所操作的数据类型被指定为一个参数

  • 提供编译时类型安全检测机制,允许程序员在编译时检测到非法的类型

二、理解

Java 泛型


  • Java 中的泛型只在编译阶段有效,不会进入到运行阶段

  • 泛型有三种使用方式,泛型类、泛型接口、泛型方法


泛型类


  • 类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开


泛型接口


  • 该方法在调用时可以接收不同类型的参数


有界的类型参数


  • 限制被允许传递到一个类型参数的类型种类范围

  • 声明一个有界的类型参数,首先列出类型参数的名称,后跟 extends 关键字,最后紧跟它的上界


泛型标记符


  • E - Element (在集合中使用,因为集合中存放的是元素)

  • T - Type(Java 类)

  • K - Key(键)

  • V - Value(值)

  • N - Number(数值类型)

  • ? - 表示不确定的 java 类型


类型通配符


  • 一般使用 ? 代替具体的类型参数

  • <? extends T>表示该通配符所代表的类型是 T 类型的子类

  • <? super T>表示该通配符所代表的类型是 T 类型的父类

三、实现

1.泛型类

创建genericity类,实现写入和读取数据


public class genericity {    public static class Box<T> {
private T t;
public void add(T t) { this.t = t; }
public T get() { return t; }
public static void main(String[] args) { Box<Integer> integerBox = new Box<Integer>(); Box<String> stringBox = new Box<String>(); integerBox.add(17); stringBox.add(new String("Hello World"));
System.out.printf("Integer Value :%d\n", integerBox.get()); System.out.printf("String Value :%s\n", stringBox.get()); } }}
复制代码


2.泛型方法

创建genericity类,比较三个值并返回最大值


public class genericity {    public static <T extends Comparable<T>> T maximum(T x, T y, T z){        T max = x;        if (y.compareTo(max) > 0){            max = y;        }        if (z.compareTo(max) > 0){            max = z;        }        return max;    }
public static void main(String[] args) { System.out.printf( "Max of %d, %d and %d is %d\n", 13, 14, 17, maximum( 13, 14, 17 ) );
System.out.printf( "Maxm of %.1f,%.1f and %.1f is %.1f\n", 5.5, 2.2, 7.7, maximum( 5.5, 2.2, 7.7 ) );
System.out.printf( "Max of %s, %s and %s is %s\n", "Shea", "Good", "Yeats", maximum( "Shea", "Good", "Yeats" ) ); }}
复制代码


3.类型通配符

public class genericity {
public static void getData(List<?> data) { System.out.println("data :" + data.get(0)); }
public static void main(String[] args) { List<String> name = new ArrayList<String>(); List<Integer> age = new ArrayList<Integer>(); List<Number> number = new ArrayList<Number>();
name.add("Yeats"); age.add(17); number.add(17.17);
getData(name); getData(age); getData(number); }}
复制代码



发布于: 刚刚阅读数: 6
用户头像

Yeats_Liao

关注

还未添加个人签名 2022.10.02 加入

还未添加个人简介

评论

发布
暂无评论
Java 泛型_后端_Yeats_Liao_InfoQ写作社区