Java中的泛型类

泛型类是具有一个或多个类型变量的类。 通用类声明看起来像非通用类声明,除了类名后跟一个类型参数。 例如,考虑以下通用类Employee <T>。


class Employee<T>
{
 private T obj;
 Employee(T obj)
 {
  this.obj=obj;
 }
 T getObj()
 {
  return obj;
 }
} 
Employee类在类名之后引入Type变量T,并用尖括号<>括起来。 类型变量可以在整个类定义中使用,以指定方法返回类型和变量类型。

泛型类可以具有多个类型变量。 例如,

类Employee <T,U>

让我们考虑以下示例程序,该示例程序显示通用Employee类,并且使用Type变量T。


class Employee<T>
{
 private T obj;
 Employee(T obj)
 {
  this.obj=obj;
 }
 T getObj()
 {
  return obj;
 }
}
/**
*@author Sreekandan.K
*/
public class GenericEmployeeClass
{
 public static void main(String args[])
 {
  Employee<String> str=new Employee<String>("AAS");
  System.out.println("Name:"+str.getObj());
  Employee<Integer> i=new Employee<Integer>(21);
  System.out.println("Age:"+i.getObj());
  Employee<Double> d=new Employee<Double>(30000.0);
  System.out.println("Salary:"+d.getObj());
 }
} 

From: https://bytes.com/topic/java/insights/944088-generic-classes-java

### Java泛型类容器的概念 在Java中,**泛型类容器**是指使用泛型机制实现的容器类。这类容器允许在定义类时使用类型参数(如`T`、`E`等),从而使得该类可以适用于多种数据类型,同时提供编译时类型检查和类型安全保证。 泛型类容器的核心优势在于: - **类型安全性**:避免了运行时因类型不匹配导致的异常。 - **代码复用性**:一个泛型类可以处理多种数据类型的对象,减少重复代码。 - **可读性和简洁性**:代码更加清晰,减少了强制类型转换的需求[^1]。 ### 泛型类容器的定义与使用方法 #### 定义泛型类 定义一个泛型类时,在类名后添加类型参数即可。例如: ```java public class Box<T> { private T item; public void setItem(T item) { this.item = item; } public T getItem() { return item; } } ``` 在这个例子中,`Box<T>`是一个泛型类,`T`是类型参数,表示该类可以存储任何类型的对象。在实例化时,可以指定具体的类型: ```java Box<String> stringBox = new Box<>(); stringBox.setItem("Hello"); System.out.println(stringBox.getItem()); // 输出: Hello Box<Integer> integerBox = new Box<>(); integerBox.setItem(123); System.out.println(integerBox.getItem()); // 输出: 123 ``` #### 使用泛型接口 泛型不仅可以用于类,还可以用于接口。定义泛型接口的方式与类类似: ```java public interface Container<T> { void add(T element); T get(int index); } ``` 然后可以通过具体类型来实现该接口: ```java public class StringContainer implements Container<String> { private List<String> list = new ArrayList<>(); @Override public void add(String element) { list.add(element); } @Override public String get(int index) { return list.get(index); } } ``` #### 泛型类容器的优势 - **类型安全**:在编译阶段即可发现类型错误,而不是在运行时抛出异常。 - **避免强制类型转换**:使用泛型后,从容器中取出的对象无需再进行显式类型转换。 - **增强代码可读性**:通过明确的类型信息,使开发者更容易理解代码意图[^2]。 #### 示例:自定义泛型容器类 以下是一个简单的泛型容器类示例,它支持动态扩容并存储任意类型的对象: ```java import java.util.Arrays; public class DynamicArray<T> { private Object[] array; private int size; public DynamicArray(int initialCapacity) { array = new Object[initialCapacity]; } public void add(T element) { if (size == array.length) { array = Arrays.copyOf(array, array.length * 2); } array[size++] = element; } @SuppressWarnings("unchecked") public T get(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException(); } return (T) array[index]; } public int size() { return size; } } ``` 使用该泛型容器类: ```java DynamicArray<String> stringArray = new DynamicArray<>(2); stringArray.add("Apple"); stringArray.add("Banana"); System.out.println(stringArray.get(0)); // 输出: Apple System.out.println(stringArray.size()); // 输出: 2 ``` #### 注意事项 - **类型擦除**:Java的泛型是通过类型擦除实现的,即在编译后,所有的泛型信息都会被移除,替换为实际类型(通常是`Object`)。因此,不能直接创建泛型数组,但可以通过`Object`数组间接实现[^3]。 - **通配符的使用**:当需要处理未知类型的泛型容器时,可以使用通配符`?`,例如`List<?>`表示未知类型的列表。 - **限制类型参数**:可以通过边界限定(如`<T extends Number>`)来限制泛型类只能接受特定类型的子类。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值