Java泛型基础(概念+实例)

在这里只讲解Java泛型基础知识以供了解Java泛型

一.概念:

泛型是jdk5引入的,在两个重要方面改变了Java。首先泛型增加了新的语法元素。其次,泛型改变了核心API中许多类和方法。

 

简单来说,对于许多不同的数据类型,算法逻辑是相同的。例如,不管堆栈存储的数据类型是Integer、Object、String、还是Thread,支持堆栈的机制是相同的。使用泛型可以之定义算法一次,使其独立于特定的数据类型,提高算法的复用性。

 

    就本质而言,“泛型”的意思是“参数化类型”。使用该特性创建的方法、类或者接口可以作为参数所指定的操作数据的类型。

    在Java提供泛型机制之前的代码,一般化的类、接口、方法通过Object引用来操纵各种不同类型的对象,问题是他们不能以类型安全的方式工作。

 

    泛型提供了以前缺失的类型安全性,并且可以简化处理过程,因为不用使用显示的强制类型转换,即不再需要Object类和实际使用 的类之间进行转换。使用泛型,所有的转换都是隐式和自动进行的。因此,泛型扩展了代码的重用能力,并且可以安全,容易的重用代码。

 

二、实例:

下面定义了两个类一个是泛型类Gen、另一个是泛型类GenDemo,该类使用Gen

// A simple generic class.  
// Here, T is a type parameter that 
// will be replaced by a real type 
// when an object of type Gen is created. 
class Gen<T> { 
  T ob; // declare an object of type T 
   
  // Pass the constructor a reference to  
  // an object of type T. 
  Gen(T o) { 
    ob = o; 
  } 
 
  // Return ob. 
  T getob() { 
    return ob; 
  } 
 
  // Show type of T. 
  void showType() { 
    System.out.println("Type of T is " + 
                       ob.getClass().getName()); 
  } 
} 
 
// Demonstrate the generic class. 
class GenDemo { 
  public static void main(String args[]) { 
    // Create a Gen reference for Integers.  
    Gen<Integer> iOb;  
 
    // Create a Gen<Integer> object and assign its 
    // reference to iOb.  Notice the use of autoboxing  
    // to encapsulate the value 88 within an Integer object. 
    iOb = new Gen<Integer>(88); 
 
    // Show the type of data used by iOb. 
    iOb.showType(); 
 
    // Get the value in iOb. Notice that 
    // no cast is needed. 
    int v = iOb.getob(); 
    System.out.println("value: " + v); 
 
    System.out.println(); 
 
    // Create a Gen object for Strings. 
    Gen<String> strOb = new Gen<String>("Generics Test"); 
 
    // Show the type of data used by strOb. 
    strOb.showType(); 
 
    // Get the value of strOb. Again, notice 
    // that no cast is needed. 
    String str = strOb.getob(); 
    System.out.println("value: " + str); 
  } 
}

运行结果:

简要分析:

初次接触可能有点困难,懂了后很简单。

首先,class Gen<T>{

其中,T是参数类型,是实际类型的占位符。因为Gen使用类型参数,所以Gen是泛型类,也称参数化类型。

  T getob() { 
    return ob; 
  } 

因为T是参数化类型,ob也是T类型,所以ob类型和getob()方法返回的类型是兼容的。

showType()通过对class对象调用getName()方法来显示T的类型,getClass是由Object方法定义的,该方法返回一个class对象。

 

注意:泛型只使用引用类型。

当声名泛型类的实例时,传递过来的参数必须是引用类型,不能使用基本类型,如int 、char是不可以的。所以下面的声名是非法的:

Gen<int> intob=new Gen<int>(53);

 

如果读到这里,相信你已经明白泛型的基本原理,总之泛型非常重要。在之后我还会更新一些泛型的相关知识,本文纯手打无废话。参考书籍,清华大学出版社《Java8编程参考官方教程》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值