`

Java泛型使用详解

    博客分类:
  • Java
阅读更多

一、泛型接口

  1、第一种:在子类的定义上也声明泛型类型。

package com.xieke.generics.impl.demo1;

interface Info<T>
{ // 在接口上定义泛型
    public T getVar(); // 定义抽象方法,抽象方法的返回值就是泛型类型
}

class InfoImpl<T> implements Info<T>
{ // 定义泛型接口的子类
    private T var; // 定义属性

    public InfoImpl(T var)
    { // 通过构造方法设置属性内容
        this.setVar(var);
    }

    public void setVar(T var)
    {
        this.var = var;
    }

    @Override
    public T getVar()
    {
        return this.var;
    }
};

/**
 * 泛型接口实现的两种方式
 * 
 * 第一种:在子类的定义上也声明泛型类型
 * 
 * @author xieke
 *
 */
public class GenericsDemo1
{
    public static void main(String arsg[])
    {
       Info<String> i = null; // 声明接口对象
        i = new InfoImpl<String>("xieke"); // 通过子类实例化对象
        System.out.println("内容:" + i.getVar());
    }
};

   2、第二种:子类不使用泛型声明,在实现接口的时候直接指定好其具体的操作类型。

package com.xieke.generics.impl.demo2;

interface Info<T>
{ // 在接口上定义泛型
    public T getVar(); // 定义抽象方法,抽象方法的返回值就是泛型类型
}

class InfoImpl implements Info<String>
{ // 定义泛型接口的子类
    private String var; // 定义属性

    public InfoImpl(String var)
    { // 通过构造方法设置属性内容
        this.setVar(var);
    }

    public void setVar(String var)
    {
        this.var = var;
    }

    @Override
    public String getVar()
    {
        return this.var;
    }
};

/**
 * 泛型接口实现的两种方式
 * 
 * 第二种:子类不使用泛型声明,在实现接口的时候直接指定好其具体的操作类型
 * 
 * @author xieke
 *
 */
public class GenericsDemo2
{
    public static void main(String arsg[])
    {
       Info i = null; // 声明接口对象
        i = new InfoImpl("xieke"); // 通过子类实例化对象
        System.out.println("内容:" + i.getVar());
    }
};

 二、泛型方法

  1、第一种形式:接收任意类型的数据。

package com.xieke.generics.method.demo1;

class Demo
{
    public <T> T fun(T t)
    { // 可以接收任意类型的数据
        return t; // 直接把参数返回
    }
};

/**
 * 定义泛型方法
 * 
 * @author xieke
 *
 */
public class GenericsDemo1
{
    public static void main(String args[])
    {
       Demo d = new Demo(); // 实例化Demo对象
        String str = d.fun("xieke"); // 传递字符串
        int i = d.fun(22); // 传递数字,自动装箱
        System.out.println(str); // 输出内容
        System.out.println(i); // 输出内容
    }
};

   2、第二种形式:指定上限数据类型。

package com.xieke.generics.method.demo2;

class Info<T extends Number>
{ // 指定上限,只能是数字类型
    private T var; // 此类型由外部决定

    public T getVar()
    {
        return this.var;
    }

    public void setVar(T var)
    {
        this.var = var;
    }

    @Override
    public String toString()
    { // 覆写Object类中的toString()方法
        return this.var.toString();
    }
};

/**
 * 通过泛型方法返回泛型类的实例
 * 
 * @author xieke
 *
 */
public class GenericsDemo2
{
    public static void main(String args[])
    {
        Info<Integer> i = fun(22);
        System.out.println(i.getVar());
    }

    public static <T extends Number> Info<T> fun(T param)
    {
        Info<T> temp = new Info<T>(); // 根据传入的数据类型实例化Info
        temp.setVar(param); // 将传递的内容设置到Info对象的var属性之中
          return temp; // 返回实例化对象
    }
};

   3、第三种形式:使用泛型统一传入参数的类型。

package com.xieke.generics.method.demo3;

class Info<T>
{  private T var; // 此类型由外部决定

    public T getVar()
    {
        return this.var;
    }

    public void setVar(T var)
    {
        this.var = var;
    }

    @Override
    public String toString()
    { // 覆写Object类中的toString()方法
        return this.var.toString();
    }
};

/**
 * 使用泛型统一传入参数的类型
 * 
 * @author xieke
 *
 */
public class GenericsDemo3
{
    public static void main(String args[])
    {
        Info<String> i1 = new Info<String>();
        Info<String> i2 = new Info<String>();
        i1.setVar("hujun"); // 设置内容
          i2.setVar("xieke"); // 设置内容
          add(i1, i2);
    }

    public static <T> void add(Info<T> i1, Info<T> i2)
    {
        System.out.println(i1.getVar() + " " + i2.getVar());
    }
};

 三、泛型数组

package com.xieke.generics.array.demo;

public class GenericsDemo
{
    public static void main(String args[])
    {
        Integer i[] = fun1(1, 2, 3, 4, 5, 6); // 返回泛型数组
          fun2(i);
    }

    public static <T> T[] fun1(T... arg)
    { // 接收可变参数
        return arg; // 返回泛型数组
    }

    public static <T> void fun2(T param[])
    { // 输出
        System.out.print("接收泛型数组:");
        for (T t : param)
        {
            System.out.print(t + "、");
        }
    }
};

 四、泛型嵌套

package com.xieke.generics.nest.demo;

class Info<T, V>
{ // 接收两个泛型类型
    private T var;
    private V value;

    public Info(T var, V value)
    {
        this.setVar(var);
        this.setValue(value);
    }

    public void setVar(T var)
    {
        this.var = var;
    }

    public void setValue(V value)
    {
        this.value = value;
    }

    public T getVar()
    {
        return this.var;
    }

    public V getValue()
    {
        return this.value;
    }
};

class Demo<S>
{
    private S info;

    public Demo(S info)
    {
        this.setInfo(info);
    }

    public void setInfo(S info)
    {
        this.info = info;
    }

    public S getInfo()
    {
        return this.info;
    }
};

public class GenericsDemo
{
    public static void main(String args[])
    {
        Demo<Info<String, Integer>> d = null; // 将Info作为Demo的泛型类型
        Info<String, Integer> i = null; // Info指定两个泛型类型
        i = new Info<String, Integer>("xieke", 22); // 实例化Info对象
        d = new Demo<Info<String, Integer>>(i); // 在Demo类中设置Info类的对象
        System.out.println("内容一:" + d.getInfo().getVar());
        System.out.println("内容二:" + d.getInfo().getValue());
    }
};

 

   转载请注明出处: http://xieke90.iteye.com/blog/2310772

 

1
3
分享到:
评论

相关推荐

    java泛型详解.pdf

    java泛型详解.pdf

    Java 泛型详解

    Java泛型详解,Java泛型详解,Java泛型详解,Java泛型详解

    思维导图之Java泛型详解

    思维导图之Java泛型详解

    java泛型详解java泛型详解.doc

    Java 泛型是一种强大的语言特性,它允许在类、接口和方法中使用类型参数,以实现类型的安全性和代码的重用性。泛型是 Java 从 JDK 5.0 版本开始引入的重要特性,目的是增强类型系统,提高程序的类型安全性,减少运行...

    很好的Java泛型的总结

    Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...

    Java泛型三篇文章,让你彻底理解泛型(super ,extend等区别)

    Java 泛型详解 Java 泛型是 Java SE 5.0 中引入的一项特征,它允许程序员在编译时检查类型安全,从而减少了 runtime 错误的可能性。泛型的主要优点是可以Reusable Code,让程序员编写更加灵活和可维护的代码。 ...

    java 泛型的使用 详细讲解

    ### Java泛型的使用详细讲解 #### 一、引言 在Java开发中,泛型是一种重要的语言特性,它能够帮助开发者在不增加代码量的情况下处理多种数据类型,同时还能保持代码的清晰度和可读性。本文将详细介绍Java泛型的...

    JAVA泛型详解[参考].pdf

    还有类型擦除,这是Java泛型的一个特性,意味着在运行时,所有的泛型信息都会被移除,因此泛型并不影响程序的性能,但它提供了编译时的类型检查。 在集合框架中,泛型发挥了重要作用。Java的List、Set、Map等集合类...

    面试必须资料java泛型攻略、

    ### Java 泛型详解与应用 #### 一、什么是Java泛型? Java泛型(Generics)是一种在编译时确保类型安全的机制,它允许程序员编写类型安全的通用类或方法,而无需进行显式的类型转换。在Java 1.5引入泛型之前,集合...

    JAVA泛型详解DD

    【Java泛型详解】 Java泛型是Java SE 5.0引入的新特性,它允许在类、接口和方法声明中使用类型参数,从而增强了代码的类型安全性和重用性。泛型的主要目标是提高代码的复用性,减少类型转换,并在编译时捕获类型...

    java 1.5泛型详解

    本文将深入探讨Java泛型的概念、优点、使用方式及其在实际开发中的应用。 **一、泛型的基本概念** 泛型是Java语言中的一种参数化类型,它允许在定义类、接口和方法时使用类型参数,从而实现数据类型的模板化。通过...

    java泛型的知识,网上搜集整理,包括阐述,例子,以及心得

    java泛型 开发心得 实例代码 详解文档 全是从网上搜索得来的,感觉比较好的

    java泛型详解

    java 泛型详解

    JAVA泛型详解

    ### JAVA泛型详解 #### 泛型:打破具体类型的枷锁 在传统的Java编程中,类和方法的设计往往受限于具体的类型,无论是基本数据类型还是自定义的类。这种限制在面对多变的需求时显得尤为棘手,因为它迫使开发者重复...

    深入理解java泛型详解

    让我们深入探讨一下Java泛型的各个方面。 首先,泛型(Generic type)是一种在定义类、接口或方法时,使用类型参数的方式。类型参数就像是方法的形参,但用于类型而非值。例如,当我们创建一个泛型列表`List&lt;T&gt;`,`...

    Java深度历险之Java泛型.docx

    ### Java泛型详解 #### 一、Java泛型概述 Java泛型(Generics)是Java SE 5.0引入的一项重要新特性,它允许开发者在定义类、接口或方法时使用类型参数(Type Parameters)。类型参数在使用时可以用具体的类型来...

    Java中的泛型机制详解

    ### Java中的泛型机制详解 #### 泛型概念与背景 在Java中,泛型是一种在编译时检查类型安全性的方法,它提供了一种在类接口或方法中使用类型参数的能力,允许开发者指定实际使用的具体类型。这种机制极大地提高了...

Global site tag (gtag.js) - Google Analytics