zoukankan      html  css  js  c++  java
  • Java为什么要在1.5之后增加泛型

      一个新技术的诞生,必定有其历史原因,通过究其历史,也能加深对技术的理解。

      Java1.5之后增加了泛型的使用,那么为什么要增加泛型呢?本文主要讲述这个问题。

      首先考虑一下如下的情况,

      

     1 package com.test.generic;
     2 
     3 public class GenericTest {
     4     private Boolean f;
     5 
     6     public Boolean getF() {
     7         return f;
     8     }
     9 
    10     public void setF(Boolean f) {
    11         this.f = f;
    12     }
    13     
    14     
    15 }
    View Code
     1 package com.test.generic;
     2 
     3 public class GenericTest1 {
     4     private String s;
     5 
     6     public String getS() {
     7         return s;
     8     }
     9 
    10     public void setS(String s) {
    11         this.s = s;
    12     }
    13     
    14 }
    View Code

      GenericTest和GenericTest1这两个类的实现的功能相同,只是方法的返回值和成员变量之间的差异,对于一些工具类来说,往往会对不同的数据类型进行处理,那么此时,就需要增加大量的对不同类型的数据处理的类,对于一个工程来说,这是可怕并且无意义的工作。在泛型之前,也有一个比较好的处理方式,如类GenericTest2,我们可以采用Object(接口或者父类)的类型,来实现对不同类型数据的处理。但这也不够完美,首先,每一次传进去的数据和取出来的数据必须一致,即使不一致,编译器也不会报错或者IDE也不会提醒问题;其次,假定传入的Object对象是String,但是我取值是强制转换成Integer,这在编译的时候也不会报错,运行时就会出现ClassCastException,这样问题就无法在编译时出现,对于程序来说,健壮性大大降低。所以,在Java1.5之后出现了泛型来解决这些问题。

     1 package com.testeneric;
     2 
     3 public class GenericTest2 {
     4     private Object o;
     5 
     6     public Object getO() {
     7         return o;
     8     }
     9 
    10     public void setO(Object o) {
    11         this.o = o;
    12     }
    13         
    14 }
    View Code

    如类GenericTest3

     1 package com.test.generic;
     2 
     3 public class GenericTest3<T> {
     4     private T o;
     5 
     6     public T getO() {
     7         return o;
     8     }
     9 
    10     public void setO(T o) {
    11         this.o = o;
    12     }
    13     
    14     public static void main(String[] args) {
    15         GenericTest3<String> test1 = new GenericTest3<String>();
    16         
    17         test1.setO("hello");
    18         System.out.println(test1.getO());
    19     }
    20 }
    View Code

    这样类的参数类型是T,那么什么类型都可以传入到类中,实现了对不同类型的数据进行处理,并且在使用的时候,如果使用的是IDE,那么一旦确认下来T是什么类型,编译器就会提示该类型,只要编译的时候没有问题,那么运行时也不会出现问题。

  • 相关阅读:
    react-webpack
    react
    重置手机过程
    运用 Node-RED 开发 LoRa 应用
    IBM Node-RED 安装与使用教程
    Node-RED 入门教程:简介
    Thingsboard 3.0 修改 Title、默认语言、主题颜色
    Thingsboard 3.0 通过 tb-gateway 网关接入 MQTT 设备教程
    Thingsboard 入门学习笔记:属性
    ThingsBoard 3.0 版本发布
  • 原文地址:https://www.cnblogs.com/dingcx/p/6912755.html
Copyright © 2011-2022 走看看