# 将原始类型转换为泛型的重构

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com/zh-cn/help/idea/llms.txt).

将原始类型转换为泛型  重构旨在将现有未使用泛型的代码转换为支持泛型的代码。 重构会分析现有代码，并为每个原始类型创建安全且一致的参数类型。

Procedure: 安装 Additional Java Refactorings 插件

此功能性依赖于 [其他 Java 重构操作](https://plugins.jetbrains.com/plugin/17656-additional-java-refactorings) 插件，您需要安装并启用该插件。

1. 按 `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS)) 打开设置，然后选择  `插件` 。

2. 找到  其他 Java 重构操作  插件，然后点击   安装  。 如果出现提示，请重启 IDE。

Procedure: 运行"将原始类型转换为泛型"重构

1. 选择代码转换的级别，可以是方法、类、包或目录，您可以在  Project 或  Structure 视图中进行选择，也可以将文本光标放置在编辑器中的类名或方法名上。 如果您想将泛型应用于单个代码片段，请在编辑器中选择一个。

2. 从主菜单或上下文菜单中选择  `重构 | 将原始类型转换为泛型` 。

3. 在打开的对话框中，定义 [重构选项](#generify_dialog)。

![将原始类型转换为泛型](https://resources.jetbrains.com/help/img/idea/2026.3/generify_code.png)

4. [预览并应用更改](refactoring-source-code.html#changes_preview)。

## 示例

IntelliJ IDEA 尝试生成尽可能从 Java 角度来看正确的代码。 换句话说，每个上下文引入了一些类型限制，重构生成不与现有上下文矛盾的最佳可能类型（在我们的例子中是  `<String>` ）。

|  之前  |  之后  |
| --- | --- |
|     ```JAVA public void method() {     List list = new LinkedList();     list.add("string"); }  ```    |     ```JAVA public void method() {     List<String> list = new LinkedList<String>();     list.add("string"); }  ```    |

## 将原始类型转换为泛型重构

请使用此对话框指定   将原始类型转换为泛型   重构的选项。

|  条目  |  描述  |
| --- | --- |
|  删除废弃转换  |  如果选中此选项，IntelliJ IDEA 会分析参数类型转换是否因重构而改变。 如果生成的参数类型与过时的类型相似，则将删除强制转换语句。  |
|  将以 Object 参数化的类型保留为原始类型  |  选中此选项以将那些包含  `java.lang.Object`  作为参数的对象转换为原始对象。  |
|  执行详尽的搜索  |  选中此选项以在所有节点中执行搜索。  |
|  Generify对象  |  选中此选项以将  `java.lang.Object`  对象转换为它们实际使用的类型。  |
|  产生通配符类型  |  选中此选项以尽可能生成通配符类型（如表达式  `List<? extends String>` ）。  |
|  保存原始数组  |  如果选中此复选框，数组不会更改为带有参数化类型的数组。 否则，数组将被转换为参数化类型。    清除此复选框可能有风险，并导致代码无法编译。     |

## See also

### 重构

[代码重构](refactoring-source-code.html)

