`

实例186 - 泛型方法与数据查询

 
阅读更多

在Java中,不仅可以声明泛型类,也可以在普通类中声明泛型方法。声明泛型方法需要注意如下几点:

  • 使用<T>格式来表示 泛型类型参数,参数的个数可以不止一个
  • 类型参数列表要放在 访问权限修饰符、static和final之后
  • 类型参数列表要放在 返回值类型、方法名称、方法参数之前

例如:

public static <T> List<T> query(String sql, Class<T> type)

 心法领悟186:静态泛型方法

在使用泛型类时,需要注意不能将泛型参数类型 用于  静态域 和 静态方法中。 而对于泛型方法,则可以是静态的。这是 泛型类  与 泛型方法 的 重要区别。 产生这种区别的原因在于 擦除。 由于在泛型方法中已经指明了 参数的具体类型,如本例中的type,所以即使发生了 擦除,类型也不会丢失,而 泛型类 就不同了。

 

 

package com.mingrisoft.generic;

public class Book{
    
    private int id;
    private String name;
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    public String toString() {
        return id + ":" + name;
    }
}

 

package com.mingrisoft.generic;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

public class GenericQuery {
    
    private static String URL = "jdbc:mysql://localhost:3306/db_database";
    private static String DRIVER = "com.mysql.jdbc.Driver";
    private static String USERNAME = "mr";
    private static String PASSWORD = "mingrisoft";
    private static Connection conn;
    
    public static Connection getConnection() {
        DbUtils.loadDriver(DRIVER);
        try {
            conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    
    public static <T> List<T> query(String sql, Class<T> type) {
        QueryRunner qr = new QueryRunner();
        List<T> list = null;
        try {
            list = qr.query(getConnection(), sql, new BeanListHandler<T>(type));
            System.out.println("list:" + list);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DbUtils.closeQuietly(conn);
        }
        return list;
    }
}

 

 

 

package com.mingrisoft.generic;

import java.util.List;

public class GenericQueryTest {
    public static void main(String[] args) {
        String sql = "select * from books;";
        List<Book> list = GenericQuery.query(sql, Book.class);
        System.out.println("明日科技新书:");
        for (Book books : list) {
            System.out.println(books);
        }
    }
}

 Output:

 

list:[1:Core Java I, 2:Core Java II, 3:Java 从入门到精通]

明日科技新书:

1:Core Java I

2:Core Java II

3:Java 从入门到精通

分享到:
评论

相关推荐

    实例190 - 泛型化的折半查找法

    - 泛型方法允许我们在方法定义中使用类型参数,使方法能够处理多种数据类型。 2. **泛型化的折半查找法**: - 折半查找的基本思想是每次将查找区间减半,直到找到目标值或者区间为空。 - 泛型化的折半查找方法...

    实例188 -泛型化接口与最大值

    "实例188 - 泛型化接口与最大值"这个主题探讨了如何在接口设计中利用泛型来实现通用的最大值计算功能。 首先,我们来理解泛型接口。接口(Interface)在Java中是一种定义行为的蓝图,而泛型接口则是接口与泛型的...

    JAVA-泛型课件-泛型课件

    同时,泛型还提高了代码的复用性,因为一个泛型类或方法可以适用于多种数据类型,而无需为每种数据类型编写重复的代码。 ### 泛型与类型安全 泛型在集合框架中的应用尤其重要。在Java SE 1.5版本之前,集合框架如`...

    8-java进阶-泛型1

    泛型主要应用于类、接口和方法中,用来限制可以存储或处理的数据类型。 1. **泛型的意义**: - 泛型的主要目的是增强代码的类型安全性,避免在运行时出现ClassCastException。 - 它允许在编译时检查类型,确保...

    GP-泛型算法通则.rar_GP算法_gp_泛型

    4. GP与泛型的结合:阐述将GP算法设计为泛型的方法,如何通过泛型编程实现GP算法的通用性,提高代码复用性,并减少针对不同数据类型重复编写代码的工作量。 5. 实例分析:可能包含具体的代码示例,展示如何在实际...

    黑马程序员----泛型学习注意点

    泛型是Java SE 5.0引入的新特性,主要用于集合框架,它可以限制容器中存储的数据类型,确保在编译时就能检测出错误,而不是等到运行时。泛型使用尖括号`&lt;&gt;`表示,如`List&lt;String&gt;`。 2. 类型参数: 泛型中的`T`、...

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

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

    实例185 - 自定义泛型化数组类

    这个实例185可能是进一步讨论泛型数组类如何应用于实际项目,例如作为缓存、队列或其他数据结构的基础,或者作为工具类帮助处理不同类型的数据集。标签中的"源码"表明可能有具体的代码实现供学习,而"工具"可能意味...

    实例讲解Java泛型编程的快速入门

    3. **泛型与数据类型转换** - 泛型消除了手动类型转换的需要。在没有泛型的情况下,我们需要在获取集合元素时进行强制类型转换,这可能导致`ClassCastException`。泛型自动确保类型安全,避免了这种风险。 - 例如...

    c++系列-泛型编程与模板-源码

    泛型编程是C++中一种抽象编程的方法,它允许我们编写不依赖于特定数据类型的函数或类。这样做的好处在于,我们可以在不损失效率的情况下编写一次代码,然后用于处理多种数据类型。泛型编程的主要工具是模板。 ### ...

    泛型实例<匿名方法实现排序与查找>

    在这个“泛型实例&lt;匿名方法实现排序与查找&gt;”中,我们将深入探讨如何利用泛型以及匿名方法来实现数据的排序和查找功能,这在S2学期的学习中是非常关键的实践环节。 首先,让我们理解什么是泛型。泛型是在.NET框架中...

    无涯教程(LearnFk)-Java-泛型教程离线版.pdf

    泛型类声明与非泛型类类似,但泛型类在类名后面会有一个类型参数部分,这使得泛型类可以用于多种数据类型。当创建泛型类的实例时,需要提供具体的类型参数。例如,在示例代码中,我们看到如何创建了Box类的Integer和...

    Java 基础(4-8) - 泛型机制详解.pdf

    在Java中,泛型允许开发者在类、接口和方法中使用类型参数,使得代码能处理多种数据类型而无需重复编写相似的代码。然而,由于Java的类型系统是静态的,为了保持向后兼容性,Java采用了“伪泛型”策略,即在编译阶段...

    大学课程讲义-Java基础-泛型.docx

    当我们实例化一个泛型类或接口时,如`List&lt;Integer&gt;`,我们提供了一个实际的类型参数(在这里是`Integer`),这个参数将替换掉所有的类型参数`E`,确保所有的操作都与指定的类型兼容。 3. **泛型和子类继承** ...

    泛型java的泛型知识,非常有用

    4. **泛型与数据类型转换** - 泛型的主要优点之一是消除显式类型转换的需求。在泛型之前,我们需要手动进行类型转换,如 `Hashtable` 的使用。引入泛型后,如 `List&lt;String&gt;` 直接存储和获取 `String` 对象,无需...

    实例185 - 使用泛型实现栈结构

    泛型允许我们在类、接口和方法中使用类型参数,这些类型参数在编译时会被替换为实际的数据类型。例如,我们可以通过泛型定义一个可以存储任何类型的栈: ```java public class GenericStack&lt;T&gt; { private T[] ...

    29编程范式游记(2)-泛型编程1

    同样,类模板允许创建泛型类,其中成员函数也可以是模板,提供了一种创建泛型数据结构(如STL中的容器)的方法。 2. **虚函数(Virtual Functions)**: 虚函数是C++中实现多态性的重要工具,它可以使得基类的指针...

    Java8新特性探究-泛型的目标类型推断.doc

    假设我们有一个简单的泛型类 `List` 和两个方法 `nil` 与 `cons`: ```java class List&lt;E&gt; { static &lt;Z&gt; List&lt;Z&gt; nil() {...} static &lt;Z&gt; List&lt;Z&gt; cons(Z head, List&lt;Z&gt; tail) {...} } class Example { E head...

    java 泛型方法使用示例

    泛型方法是泛型技术在类方法层面的应用,它允许我们定义一个可以处理多种数据类型的通用方法。下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法...

Global site tag (gtag.js) - Google Analytics