freeCodeCamp/guide/chinese/java/generics/index.md

79 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Generics
localeTitle: 泛型
---
# 泛型
Java Generics是一种方便地使用特定数据类型的集合和类而不必将数据转换回原始数据类型的方法。这可以防止以编译时和运行时错误的形式出现很多问题。
简单地说Generics允许你明确地说例如一个ArrayList对象保存Integers这样当你调用get方法时你不需要在Object和Integer之间进行转换。下面是一个如何在Generics之前使用ArrayList的示例。
```java
import java.util.ArrayList;
public class Example {
private ArrayList classNames;
public Example() {
classNames = new ArrayList();
}
public void addName(String name) {
classNames.add(name);
}
public String getNameAtIndex(int index) {
return (String) classNames.get(index);
}
}
```
上面的主要问题是如果以某种方式将类型为String的Object添加到ArrayList中则`getNameAtIndex(int index)`方法将导致运行时错误。为了解决这个问题,我们使用泛型。
泛型的语法非常简单。下面是实例化ArrayList的示例。
```java
import java.util.ArrayList;
public class Example {
private ArrayList<String> classNames;
public Example() {
classNames = new ArrayList<String>();
}
public void addName(String name) {
classNames.add(name);
}
public String getNameAtIndex(int index) {
return classNames.get(index);
}
}
```
创建自己的Generic类的语法如下。
```java
import java.util.ArrayList;
public class Example <T> {
private ArrayList<T> classNames;
public Example() {
classNames = new ArrayList<T>();
}
public void addName(T name) {
classNames.add(name);
}
public T getNameAtIndex(int index) {
return classNames.get(index);
}
}
```
请注意在命名类时在尖括号内您可以确保Generic类型是那样的 你要。例如如果您想确保类型可以作为String的形式读取那么您将去`<T extends String>` 。
请注意,字母`T`是占位符,只要您使用相同的字母,就可以制作任何您喜欢的内容 整个班级。