Java 形参怎么写入泛型
在 Java 中,我们可以使用泛型来在方法、类或接口中定义一种通用的类型。通过使用泛型,我们可以编写更加灵活和可重用的代码,同时提高程序的类型安全性。
泛型形参的定义
泛型形参是在方法、类或接口的定义中使用的一种特殊类型。在 Java 中,我们使用尖括号(<>)来指定泛型形参。通常,我们使用单个大写字母来表示泛型形参,如T
、E
、K
等。
下面是一个简单的示例,展示了如何在方法中使用泛型形参:
public class GenericMethodExample {
// 泛型方法
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.print(element + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] integers = {1, 2, 3, 4, 5};
Double[] doubles = {1.1, 2.2, 3.3, 4.4, 5.5};
String[] strings = {"Hello", "World"};
// 调用泛型方法
printArray(integers);
printArray(doubles);
printArray(strings);
}
}
在上面的示例中,我们定义了一个名为printArray
的泛型方法,它接受一个泛型数组作为参数并打印数组的元素。在方法定义中,我们使用了尖括号(<>)来指定泛型形参T
,然后在方法体中可以像使用普通类型一样使用T
。
泛型形参的限定
有时候,我们希望对泛型形参进行一些限制,例如只接受特定类型的参数。为了实现这一目的,我们可以使用泛型形参的限定。
下面是一个示例,展示了如何使用泛型形参的限定:
public class GenericMethodExample {
// 泛型方法,接受实现了 Comparable 接口的类型
public static <T extends Comparable<T>> T maximum(T a, T b, T c) {
T max = a;
if (b.compareTo(max) > 0) {
max = b;
}
if (c.compareTo(max) > 0) {
max = c;
}
return max;
}
public static void main(String[] args) {
Integer intMax = maximum(3, 7, 1);
Double doubleMax = maximum(1.5, 2.9, 0.8);
String stringMax = maximum("Apple", "Banana", "Orange");
System.out.println("Maximum Integer: " + intMax);
System.out.println("Maximum Double: " + doubleMax);
System.out.println("Maximum String: " + stringMax);
}
}
在上面的示例中,我们定义了一个名为maximum
的泛型方法,它接受三个实现了Comparable
接口的泛型形参T
。在方法定义中,我们使用了extends
关键字来限定T
必须是实现了Comparable
接口的类型。通过这样的限定,我们可以在方法体中使用compareTo
方法比较传入的参数。
项目方案示例
假设我们正在开发一个图书管理系统,我们希望能够处理不同类型的图书。为了实现这一目的,我们可以使用泛型来定义图书类和图书管理类。
public class Book<T> {
private T title;
private T author;
public Book(T title, T author) {
this.title = title;
this.author = author;
}
public T getTitle() {
return title;
}
public void setTitle(T title) {
this.title = title;
}
public T getAuthor() {
return author;
}
public void setAuthor(T author) {
this.author = author;
}
}
public class Library<T extends Book<?>> {
private List<T> books;
public Library() {
books = new ArrayList<>();
}
public void addBook(T book) {
books.add(book);
}
public void displayBooks() {
for (T book : books) {
System.out.println("Title: " + book.getTitle() + ", Author: " + book.getAuthor());
}
}
}
public class Main {