博客
关于我
泛型2(Java)
阅读量:288 次
发布时间:2019-03-01

本文共 2171 字,大约阅读时间需要 7 分钟。

泛型类的使用–通配符

通配符在泛型类的使用中起着关键作用,尤其是在泛型类作为方法参数时,通配符用于限制传入的类型实参。通过使用通配符,我们可以对泛型参数施加上界或下界,确保传递的类型符合预期。

1.1 基本概念

通配符(?)是泛型使用中的核心元素,用于指定类型边界。通配符可以在两种场景中使用:

  • 作为上界:限制传入的类型必须是某个特定类的子类。
  • 作为下界:限制传入的类型必须是某个特定类的父类。

1.2 通配符的上界

语法:在通配符后使用 extends 关键字来指定上界。

示例

public static void printAll(MyArray
m) { // 可以传入Animal子类的任意类型 printAll(new MyArray
(...)); printAll(new MyArray
(...)); printAll(new MyArray
(...)); // 下列调用会编译错误 printAll(new MyArray
(...)); printAll(new MyArray
(...));

注意:在泛型使用中,通配符的上界与泛型定义中的类型边界是不同的概念,需要区分处理。

1.3 通配符的下界

语法:在通配符后使用 super 关键字来指定下界。

示例

public static void printAll(MyArray
m) { // 可以传入Cat父类的任意子类 printAll(new MyArray
(...)); printAll(new MyArray
(...)); printAll(new MyArray
(...)); // 下列调用会编译错误 printAll(new MyArray
(...)); printAll(new MyArray
(...));

泛型中的父子类型

在泛型中,确定父子关系需要使用通配符。以下示例展示了如何通过通配符来表达类之间的继承关系:

public class MyArray
{ // MyArray
是 MyArray
的子类型 // MyArray
也不是 MyArray
的子类型 // MyArray
也不是 MyArray
的子类型 // 需要使用通配符来确定父子关系 MyArray
parent; // parent 可以是 MyArray
的子类型

泛型方法

3.1 语法格式

泛型方法的语法格式如下:

public static 
void swap(T[] arr, int i, int j) { T temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;}

3.2 示例

public class Main {    public static 
void swap(T[] arr, int i, int j) { T temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } // 没有显示指定类型,编译期间会进行类型推导 public static void main(String[] args) { Integer[] a = { ... }; swap(a, 0, 9); // 显式指定类型,编译期间不需要进行类型推导 String[] b = { ... }; Main.swap(b, 0, 9); }}

泛型的优缺点

优点:

  • 提高代码复用性:通过泛型,可以实现不同类型数据的统一处理。
  • 提高开发效率:减少了类型检查的需求,代码更加简洁。
  • 支持通用容器和算法:可以创建如集合、列表等通用容器。

缺点:

  • 不支持基本数据类型:无法直接使用 int, String, boolean 等基本数据类型作为泛型参数。
  • 无法实例化泛型类型:无法创建像 new List<int> 这样的对象。
  • 无法使用静态属性:无法在泛型类中声明静态的属性。
  • 无法使用 instanceof 判断:无法对带参数类型的泛型进行 instanceof 判断。
  • 无法创建泛型数组:无法直接创建像 String[] arr = new String<String>(); 这样的数组。
  • 无法抛出或捕获泛型异常:异常不支持泛型,无法创建带参数的异常。
  • 无法重载泛型方法:泛型类型不是方法参数的一部分,无法进行重载。

转载地址:http://btsa.baihongyu.com/

你可能感兴趣的文章
Objective-C实现Hopcroft算法(附完整源码)
查看>>
Objective-C实现horizontal projectile motion平抛运动算法(附完整源码)
查看>>
Objective-C实现hornerMethod霍纳法算法(附完整源码)
查看>>
Objective-C实现Horn–Schunck光流算法(附完整源码)
查看>>
Objective-C实现Http Post请求(附完整源码)
查看>>
Objective-C实现http下载文件 (附完整源码)
查看>>
Objective-C实现Http协议下载文件(附完整源码)
查看>>
Objective-C实现huffman哈夫曼编码算法(附完整源码)
查看>>
Objective-C实现ID3贪心算法(附完整源码)
查看>>
Objective-C实现IIR 滤波器算法(附完整源码)
查看>>
Objective-C实现IIR数字滤波器(附完整源码)
查看>>
Objective-C实现insertion sort插入排序算法(附完整源码)
查看>>
Objective-C实现integer partition整数分区算法(附完整源码)
查看>>
Objective-C实现integerPartition整数划分算法(附完整源码)
查看>>
Objective-C实现interpolation search插值搜索算法(附完整源码)
查看>>
Objective-C实现Interpolation search插值查找算法(附完整源码)
查看>>
Objective-C实现intersection交集算法(附完整源码)
查看>>
Objective-C实现intro sort内省排序算法(附完整源码)
查看>>
Objective-C实现inverse matrix逆矩阵算法(附完整源码)
查看>>
Objective-C实现inversions倒置算法(附完整源码)
查看>>