`

泛型用法

    博客分类:
  • java
 
阅读更多
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

  Java语言引入泛型的好处是安全简单。

  在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

  泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

  泛型在使用中还有一些规则和限制:

  1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。

  2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。

  3、泛型的类型参数可以有多个。

  4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为“有界类型”。

  5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(java.lang.String);

  泛型还有接口、方法等等,内容很多,需要花费一番功夫才能理解掌握并熟练应用。在此给出我曾经了解泛型时候写出的两个例子(根据看的印象写的),实现同样的功能,一个使用了泛型,一个没有使用,通过对比,可以很快学会泛型的应用,学会这个基本上学会了泛型70%的内容。

  例子一:使用了泛型

public class Gen1<T> {
   private T ob;
   public Gen(T ob){
    this.ob=ob;
   }
   public T getOb(){
    return ob;
   }
   public void setOb(T ob){
    this.ob=ob;
   }
   public void showType() {
  System.out.println("T的实际类型是:"+ob.getClass().getName());
   }
}
public class GenDemo1 {
 public static void main(String[] args){
 //定义泛型类Gen的一个Integer版本
 Gen<Integer> intOb=new Gen<Integer>(55);
 intOb.showTyep();
 int i= intOb.getOb();
 System.out.println("value= " + i);

 System.out.println("<------------------>");

 //定义泛型类Gen的一个String版本
 Gen<String> strOb=new Gen<String>("Hello Gen!");
 strOb.showTyep();
 String s=strOb.getOb();
 System.out.println("value= " + s);
}
}

  例子二:没有使用泛型

public class Gen {
 private Object ob; //定义一个通用类型成员

 public Gen2(Object ob) {
  this.ob = ob;
 }

 public Object getOb() {
  return ob;
 }

 public void setOb(Object ob) {
  this.ob = ob;
 }

 public void showTyep() {
  System.out.println("T的实际类型是: " + ob.getClass().getName());
 }
}

public class GenDemo {
 public static void main(String[] args) {
  //定义类Gen2的一个Integer版本
  Gen2 intOb = new Gen2(new Integer(88));
  intOb.showTyep();
  int i = (Integer) intOb.getOb();
  System.out.println("value= " + i);

  System.out.println("----------------------------------");

  //定义类Gen2的一个String版本
  Gen2 strOb = new Gen2("Hello xiaobai!");
  strOb.showTyep();
  String s = (String) strOb.getOb();
  System.out.println("value= " + s);
 }
}

  运行结果:

  两个例子运行Demo结果是相同的,控制台输出结果如下:

  T的实际类型是:

java.lang.Integer
value= 55
----------------------------------
T的实际类型是: java.lang.String
value= Hello xiaobai!

Process finished with exit code 0
分享到:
评论

相关推荐

    C# 简单 泛型 用法

    2. **泛型方法**: 类似于泛型类,我们也可以在类或结构体中定义泛型方法。这些方法可以有自己的类型参数,使得方法可以在不指定具体类型的情况下处理数据。例如,`void Swap(ref T a, ref T b)`方法可以交换两个相同...

    C++泛型用法_.docx

    C++标准库(STL,Standard Template Library)大量使用了泛型编程,如`std::vector&lt;T&gt;`, `std::map, TValue&gt;`等。这些容器提供了丰富的操作,并且可以自动管理内存,实现了高效的数据存储和检索。 六、C++泛型编程...

    C#泛型类、泛型方法、泛型接口、泛型委托的实例

    本文将深入探讨泛型类、泛型方法、泛型接口和泛型委托,并通过实例来阐述它们的应用。 首先,我们来看泛型类。泛型类是具有一个或多个类型参数的类。类型参数是在定义类时使用的占位符,实际的类型在创建类的实例时...

    Delphi_2009_2010_XE_泛型使用全集(队_栈_字典_列表_对象列表)

    ### Delphi 泛型使用全集(队列_栈_字典_列表_...以上是关于 Delphi 中 `TQueue` 和 `TStack` 的基本使用方法及其关键知识点的详细介绍。通过这些示例,你可以了解到如何在 Delphi 应用程序中有效地使用这些泛型集合。

    c# 泛型的使用,教你如何用泛型

    本篇文章将深入探讨C#中的泛型使用方法,帮助你更好地理解和应用这一关键概念。 首先,我们需要理解什么是泛型。泛型允许我们在定义类、接口、委托和方法时,不指定具体的类型参数,而是使用一个占位符,如`T`、`K`...

    Java静态泛型使用方法实例解析

    Java静态泛型使用方法实例解析 Java静态泛型使用方法实例解析主要介绍了Java静态泛型使用方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。 一...

    ASP.NET 的泛型实例

    泛型是.NET Framework 2.0引入的一项重要特性,它允许开发者在类、接口和方法中定义类型参数,从而实现数据类型的参数化。这带来了多方面的优势,包括类型安全、性能提升以及代码重用。在ASP.NET中,泛型尤其在数据...

    java 泛型方法使用示例

    泛型方法是一种具有类型参数的方法,这些类型参数可以在方法声明时指定,并在方法体内部使用。与类的泛型类似,它们提供了编译时类型检查,防止了不兼容类型的对象被传递,同时消除了强制类型转换的需要。 **二、...

    Java重要的泛型使用方法.docx

    ### Java泛型的重要使用方法 #### 一、引言与背景 在软件开发过程中,我们经常需要编写可重用的代码来处理不同类型的对象。例如,假设我们需要创建一个`MyArrayList`类,它可以用来存储一系列的数据,并提供添加和...

    Java泛型的用法及T.class的获取过程解析

    * 工具类:泛型可以用于工具类中,例如工具类的静态方法可以使用泛型。 五、结论 泛型是Java编程语言中的一种重要特性,它可以提高代码的灵活性和可读性。通过使用泛型,我们可以编写更加灵活和可维护的代码。此外...

    c#泛型类、泛型方法、泛型接口、泛型委托

    泛型方法是在特定类或结构体中定义的,只在该方法内部使用类型参数。这样,方法可以处理多种数据类型,而无需重复编写相同代码。例如,以下代码展示了一个交换两个元素值的方法: ```csharp public static void ...

    泛型和泛型集合类用法

    ### 泛型和泛型集合类用法详解 #### 一、泛型基础概念 泛型是现代编程语言中的一项重要特性,它允许开发者在不指定具体数据类型的情况下编写类或方法,从而达到代码重用的目的。在.NET Framework 2.0及以后版本中...

    C#泛型用法实例分析

    本文实例分析了C#泛型用法。分享给大家供大家参考。具体分析如下: 这里演示如何创建具有单个类型参数的自定义泛型列表类,以及如何实现 IEnumerable&lt;T&gt; 以便对列表的内容启用 foreach 迭代。此示例还演示客户端代码...

    泛型和方法

    这些库的源码提供了丰富的示例,可以帮助我们更好地掌握泛型和方法的高级用法,比如类型通配符、限制类型参数、擦除和桥接方法等。 总的来说,泛型和方法是Java编程的核心组成部分,熟练掌握它们能够使我们的代码...

    泛型方法的使用.rar

    在本教程中,我们将深入探讨C#中的泛型方法的使用。 首先,让我们理解什么是泛型方法。泛型方法是在定义方法时引入了一个或多个类型参数,这些类型参数在方法被调用时由实际的类型替换。这使得同一个方法可以处理...

    泛型dao 泛型dao 泛型dao

    dao接口 : PersonDAO extends GenericDao, Integer&gt; 可以不写代码,方法已经在父类泛型dao里了,这里为了说明:可扩展添加 findByNameExact()方法 子类的附加方法。 泛型daoimpl :GenericDaoImpl, ID extends ...

    C#泛型集合使用实例

    泛型队列遵循先进先出(FIFO)原则,使用`Enqueue`方法添加元素到队尾,`Dequeue`方法移除并返回队首元素。`Queue&lt;T&gt;`实现了`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口。 6. **泛型栈(Stack)** 栈遵循后进先出...

    Java泛型使用详细分析.pdf

    在本文中,我们将详细介绍 Java 泛型的使用方法和实现原理。 一、泛型的简介 泛型是 Java 5 中引入的一种语言特性,旨在解决类型安全问题。在 Java 中,泛型可以应用于集合、类、接口和方法中。泛型的主要目的是...

    JAVA-泛型课件-泛型课件

    泛型,即参数化类型(Parameterized Types),是允许在定义类、接口和方法时使用类型参数的特性。在创建类、接口或方法的时候,可以用一个或多个类型作为参数。泛型的关键在于类型参数化,这意味着可以将操作的数据...

    泛型 反射 相关概念方法使用

    本文将深入探讨这两个概念以及相关的使用方法。 首先,我们来了解泛型。泛型是Java 5引入的一项特性,它允许在定义类、接口和方法时指定类型参数,以增强代码的类型安全性和可读性。通过使用泛型,我们可以限制容器...

Global site tag (gtag.js) - Google Analytics