【JavaSE系列-基础篇6】——为什么使用泛型?

来源:互联网 发布:ug编程教程入门视频 编辑:程序博客网 时间:2024/05/24 05:54

目录

  • 目录
    • 泛型简介
    • 为什么使用泛型
    • 拓展

泛型简介

在任何软件项目中,bugs是生活中的一件很常见的事情。仔细的计划,编程,测试可以帮助。减少bug产生的普遍性,但是在一些地方,无论怎样,它们总会寻找一种方式来爬进我们的代码。在新特性开发时,并且你的代码库变得越来越大,越来越复杂的时候特别明显。

幸运的是,一些bug比其他的bug能够更早的检测出来。举个例子,编译时错误能够被更早的检测出来;你可以根据编译错误信息来弄清楚这个错误是什么?并修复它。然而,运行时错误,很困难被检测出来;它们不会立即显示到表面,当它们出现时,很可能在程序的某个程度上已经远离实际的问题的原因。

泛型通过创造更多可以在编译时检测的bug来增加代码的稳定性。

为什么使用泛型

简言之,泛型是当定义类,接口,方法时,使类型(类,接口)变成参数。很像我们在方法声明中使用的参数,类型参数为我们提供了一种,不同的输入,但重用一段相同代码的方式。它们之间的不同点在于:正式的参数输入的是值,而,类型参数输入的是类型。

在代码中使用泛型有很多优点:

  1. 强大的编译时类型检查
    如果代码违法了类型安全, java编译器强大的类型检查机制会去检查泛型代码和错误。修复编译时错误要比修复运行时错误要简单的多,因为运行时错误很难被发现。

  2. 消除类型转换
    下面的代码片段是没有使用泛型的,但是需要转换类型:

List list = new ArrayList();list.add("hello");String s = (String) list.get(0);

当你使用泛型重写时,这段代码就不需要类型转换:

List<String> list = new ArrayList<String>();list.add("hello");String s = list.get(0);   // no cast

3.使程序员可以实现泛型算法
通过使用泛型,程序员能够在集合和不同类型上实现泛型算法。可以是定制的,并且是类型安全和简单可读的。

拓展

两个问题:

  1. 不使用泛型时,使用类型转换为什么有时会报错?
  2. 使用类型转换(String)和.toString有什么区别?
   List list = new ArrayList();   list.add(1);   String s = (String) list.get(0);

1、每个对象的类型在对象创建的时候就已经确定了并且不能更改,所谓强制转换也只是使其表面上换成了另外一种类型,可以使用其方法对这个对象进行处理。也就是说,如果物品A可以当成物品B来用,就不会报错,如果物品A不能够当成物品B来用,就不会自动调用toString方法,而是马上会报错。list中放入的对象虽然本质上是Integer类型,但在表面上确是Object类型,所以在编译时没有报错,但是在对象创建的时候已经确定了其在本质上为Integer类型,因为Integer类型不能转换为String类型,所以会报错。

2、toString()方法返回的是这个对象的字符串表示,就像是这个对象的名字一样,任何对象都可以有自己的名字。

原创粉丝点击