Java 泛型是 Java 语言中的一种强大的特性,它可以帮助我们更好地管理代码,提高代码的可读性和可维护性。它允许我们在定义一个类或方法时,将其参数化为不同的数据类型,这样就可以使用不同的数据类型来创建对象或执行方法。
Java 泛型有一个重要的限制:它只能用于引用类型(即对象)。这意味着你不能使用泛型来创建原始数据类型(int、float、double 等)的对象。例如:
public class MyClass<T> { T obj; public MyClass(T obj) { this.obj = obj; } public T getObject() { return this.obj; } public static void main(String[] args) { // 创建一个 Integer 类型的对象 MyClass<Integer> intObject = new MyClass<Integer>(15); // 创建一个 String 类型的对象 MyClass<String> strObject = new MyClass<String>("Hello World"); // 创建一个 Double 类型的对象 MyClass<Double> dblObject = new MyClass<Double>(15.5); // 创建一个 int 类型的对象 // 错误: int 是原始数据类型,不能作为泛型参数 //MyClass <int > intObject = new MyClass <int > (15); }
不能创建类型参数的实例。例如,考虑这个类:
// Can"t create an instance of T. class Gen<T> { T ob; Gen() { ob = new T(); // Illegal!!! } }
没有静态成员可以使用由封装类声明的类型参数。例如,此类的所有静态成员都是非法的:
class Wrong<T> { // Wrong, no static variables of type T. static T ob; // Wrong, no static method can use T. static T getob() { return ob; } // Wrong, no static method can access object of type T. static void showob() { System.out.println(ob); } }
您可以使用自己的类型参数声明静态泛型方法。
您不能实例化基本类型是类型参数的数组。您不能创建类型特定的泛型引用的数组。
以下短程序显示了两种情况:
class MyClass<T extends Number> { T ob; T vals[]; MyClass(T o, T[] nums) { ob = o; vals = nums; } } public class Main { public static void main(String args[]) { Integer n[] = { 1 }; MyClass<Integer> iOb = new MyClass<Integer>(50, n); // Can"t create an array of type-specific generic references. // Gen<Integer> gens[] = new Gen<Integer>[10]; MyClass<?> gens[] = new MyClass<?>[10]; // OK } }
JPA教程 -JPA列长度示例使用JPA,我们可以设置字段的列长度。例如,当将字符串字段映射到VARCHAR时,我们可以在@Column 注释中设...
JPA教程 -JPA日期映射到时间示例我们可以将Java Date类型值映射到数据库中的TIME类型列。@Temporal(TemporalType.TIME)private j...
JPA教程 -JPA删除关系级联示例以下代码显示如何删除具有级联操作的相关实体。例子下面的代码来自PersonDaoImpl.java。package cn...
JPA教程 -JPA查询命名示例命名查询是用于组织查询定义和提高应用程序性能的强大工具。命名查询是使用@NamedQuery注释定义的,它...
JPA教程 - JPA查询Not Empty示例JPA SQL可以检查属性是否为空。List l = em.createQuery(SELECT p FROM Project p WHERE p.e...