这与如何使用重构从类中删除泛型类型完全相反。
我想在接口中引入类型参数。它使用非常广泛,因此手工操作不太实用。它也广泛用于导入语句和 JavaDoc,因此简单的全局字符串替换也不会很好地工作。
编辑:
我确实尝试了“尽可能使用父类型”重构,但可以理解的是,它在引入类型参数时效果不佳。
这与如何使用重构从类中删除泛型类型完全相反。
我想在接口中引入类型参数。它使用非常广泛,因此手工操作不太实用。它也广泛用于导入语句和 JavaDoc,因此简单的全局字符串替换也不会很好地工作。
编辑:
我确实尝试了“尽可能使用父类型”重构,但可以理解的是,它在引入类型参数时效果不佳。
在 IntelliJ 中,您可以使用“更改签名”重构。鉴于此代码:
public static void main(String[] args) {
MyContainer container = new MyContainer("hello!");
String val = container.get();
System.out.println(val);
}
class MyContainer {
final Object value;
MyContainer(Object value) {
this.value = value;
}
Object get() {
return value;
}
}
我右键单击MyContainer
,然后选择 Refactor->Change Signature... 从这里可以引入类型参数T
。您需要为T
. 大多数时候,为了保留现有代码,这将是Object
; 但这取决于您要更改的课程。例如,如果MyContainer
上面使用Number
而不是Object
,则新擦除类型的等价物将是Number
. 但在这种情况下,您还需要声明T extends Number
。
完成此操作后,我得到以下信息:
public static void main(String[] args) {
MyContainer<Object> container = new MyContainer<Object>("hello!");
String val = (String) container.get();
System.out.println(val);
}
class MyContainer<T> {
final Object value;
MyContainer(Object value) {
this.value = value;
}
Object get() {
return value;
}
}
现在您可以开始使用T
in MyContainer
,并通过查看IntelliJ
更改的文件,您可以开始查看需要查找的位置以开始填写正确的类型参数(因为所有自动生成的类型参数都将是Object
)。