java泛型使用例子

泛型(Generics)是Java语言中的一个重要特性,它提供了编译时类型安全检查的机制,可以用来创建可以处理不同数据类型的类和方法,同时保持类型安全。以下是泛型的一些基本使用方法:

1. 泛型类

泛型类可以定义一个或多个类型参数。例如,一个简单的泛型类:

java
public class Box {
private T t; // T stands for “Type”

public void set(T t) {
    this.t = t;
}

public T get() {
    return t;
}

}

使用泛型类:

java
Box integerBox = new Box();
integerBox.set(10); // 自动装箱
Integer someInteger = integerBox.get();

2. 泛型接口

泛型也可以用在接口上:

java
public interface Generator {
T next();
}

实现泛型接口:

java
public class FruitGenerator implements Generator {
private String[] fruits = new String[]{“Apple”, “Banana”, “Cherry”};

public String next() {
    return fruits[(int) (Math.random() * fruits.length)];
}

}

3. 泛型方法

泛型方法可以独立于类而存在:

java
public class Util {
public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
return p1.getKey().equals(p2.getKey()) &&
p1.getValue().equals(p2.getValue());
}
}

使用泛型方法:

java
Pair<String, Integer> p1 = new Pair<>(“one”, 1);
Pair<String, Integer> p2 = new Pair<>(“one”, 2);
boolean same = Util.<String, Integer>compare(p1, p2); // 显式类型参数

4. 类型通配符

类型通配符通常用于泛型方法中,表示未知类型:

java
public static void printList(List<?> list) {
for (Object item : list) {
System.out.println(item);
}
}

5. 上界通配符(<? extends E>)

表示类型参数是E或E的子类:

java
public static void addNumbers(List<? extends Number> list) {
// 可以添加Number的任何子类型的元素
}

6. 下界通配符(<? super E>)

表示类型参数是E或E的超类:

java
public static void addNumbers(List<? super Integer> list) {
list.add(1); // 可以添加Integer或其父类型的元素
}

7. 泛型数组

Java不支持直接创建泛型数组,但可以通过类型擦除后的桥接方法来创建泛型数组的引用:

java
List[] stringLists = new List[1]; // 编译错误
List<?>[] lists = new List<?>[1]; // OK,但会有警告
List[] stringLists2 = (List[]) lists; // 类型转换

泛型的使用提高了代码的复用性和类型安全性,减少了类型转换的次数,是Java编程中非常重要的一个概念。在编写代码时,应当尽可能使用泛型来提高程序的健壮性和可维护性。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用Java泛型例子,它定义了一个泛型类,可以接受任何类型的数据,并提供了一些通用的方法: ```java public class GenericClass<T> { private T data; public void setData(T data) { this.data = data; } public T getData() { return data; } public void printData() { System.out.println("Data: " + data); } public boolean isEqual(GenericClass<T> other) { return this.data.equals(other.getData()); } } ``` 在上面的例子中,我们使用Java泛型来定义一个通用的类,这个类可以接受任何类型的数据。我们使用了类型参数T来表示这个通用类型,它可以是任何Java数据类型,如String、Integer、Double等。 在类定义中,我们使用了类型参数T来定义了一个私有数据成员data,它表示这个泛型类的数据。我们还提供了一些通用的方法,这些方法可以用于处理这个数据。例如,我们使用了setData和getData方法来设置和获取这个数据。我们还提供了一个printData方法,用于打印这个数据。最后,我们使用了isEqual方法来比较两个泛型类对象的数据是否相等。 在使用这个泛型类时,我们可以使用任何Java数据类型来实例化它。例如,我们可以使用以下代码来创建一个存储整数数据的泛型类对象: ```java GenericClass<Integer> intObj = new GenericClass<>(); intObj.setData(10); intObj.printData(); // 输出:Data: 10 ``` 我们还可以使用以下代码来创建一个存储字符串数据的泛型类对象: ```java GenericClass<String> strObj = new GenericClass<>(); strObj.setData("Hello, World!"); strObj.printData(); // 输出:Data: Hello, World! ``` 在这些例子中,我们使用了类型参数来指定泛型类的数据类型。这使得我们可以使用同一个泛型类来处理不同类型的数据,从而提高了代码的通用性和重用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值