1

这与如何使用重构从类中删除泛型类型完全相反。

我想在接口中引入类型参数。它使用非常广泛,因此手工操作不太实用。它也广泛用于导入语句和 JavaDoc,因此简单的全局字符串替换也不会很好地工作。

编辑:

我确实尝试了“尽可能使用父类型”重构,但可以理解的是,它在引入类型参数时效果不佳。

4

1 回答 1

2

在 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;
    }
}

现在您可以开始使用Tin MyContainer,并通过查看IntelliJ更改的文件,您可以开始查看需要查找的位置以开始填写正确的类型参数(因为所有自动生成的类型参数都将是Object)。

于 2013-05-23T13:56:39.307 回答