在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 从入门到精通
相关推荐
相当于一个标签,声明我这里只能放什么样的数据类型泛型里面只能放类,所以基本数据类型要转换成包装类如果实例化的过程中没有指明数据类型,则默认为object表示:
1.泛型 1.1 泛型的基本概念 实现了对功能代码的复用,封装,同时对数据类型进行统一的约束 格式: 1.2 泛型的使用 1.2.1 泛型在方法上的使用(使用的是静态方法) ...类声明自定义泛型,需要通过实例化
本文讨论泛型使用的一般问题,比如为什么要使用泛型、泛型的编写方法、泛型中数据类型的约束、泛型中静态成员使用要注意的问题、泛型中方法重载的问、泛型方法等,通过这些使我们可以大致了解泛型并掌握泛型的一般...
必须提供的构造方法,以便创建实例的时候就知道具体实体的类型。 daoimpl :PersonDAOImpl extends GenericDaoImpl, Integer> implements PersonDAO public PersonDAOImpl() { super(Person.class); } 告诉对...
泛型的知识,请自己参考吧。主要介绍java泛型的知识。
C# 泛型 为什么使用泛型 泛型类实例化的理论 泛型类的不同的封闭类是分别不同的数据类型 泛型类中数据类型的约束 泛型方法 静态构造函数 方法重载 使用范围
通过使用泛型类、泛型方法以及通配符,我们可以处理多种数据类型而无需重复编写代码,并且在编译时进行类型检查,避免了运行时的类型错误。 在本文中,我们简要介绍了Java泛型的概念,并通过实例和代码详细解释了...
而CLI借自己强大的元数据系统,选择了运行时的模板实例化来支持泛型编程。C++/CLI在保留ISO-C++“编译时泛型编程”的同时,也增添了对CLI“运行时泛型编程”的支持。本课程将着重介绍C++/CLI中的“运行时泛型编程”...
本实例实现了泛型顺序队列和泛型循环队列的基本操作,并通过界面演示了队列中元素的变化,最后结合栈实现了回文字符串的判断,通过本实例可以充分掌握C#队列数据结构。
实例111 使用重载方法实现不同类型数据的计算 135 5.2 结构与类 136 实例112 通过结构计算矩形的面积 136 实例113 通过类继承计算梯形面积 137 实例114 封装类实现一个简单的计算器 139 实例115 使用面向对象思想...
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。 Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 ...
dictionary泛型数据案例,包括list泛型实例
换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。 您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。下面这...
本文以实例形式讲述了C#泛型的用法,有助于读者深入理解C#泛型的原理,具体分析如下: 首先需要明白什么时候使用泛型: 当针对不同的数据类型,采用相似的逻辑算法,为了避免重复,可以考虑使用泛型。 一、针对类的...
List字典Dictionary泛型集合实例,源码
C#中所谓泛型:即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。