8

每当 Eclipse 中的源代码中缺少泛型时,它都会建议我“推断泛型类型参数......”

问题是我认为“推断通用类型参数......”实际上并没有推断出任何东西。它通常不会提出任何建议。

它适用于哪些场景?它是如何工作的?

在某些情况下,可以“推断”出一些东西——日食仍然是空白的。

4

2 回答 2

8

这是一个示例,展示了如何在 Eclipse 中使用“推断通用类型参数”:

首先声明一个泛型类

// GenericFoo.java

public class GenericFoo<T> {
    private T foo;

    public void setFoo(T foo) {
        this.foo = foo;
    }

    public T getFoo() {
       return foo;
    }
}

然后在不指定类型的情况下实例化它,并进行不必要的类型转换。

// GenericFooUsage.java before refactoring

public class GenericFooUsage {

    public GenericFooUsage() {
        GenericFoo foo1 = new GenericFoo<Boolean>();

        foo1.setFoo(new Boolean(true));
        Boolean b = (Boolean)foo1.getFoo();
    }
}

应用“Infer Generic Type Arguments”后,代码重构为:

// GenericFooUsage.java after refactoring

public class GenericFooUsage {

    public GenericFooUsage() {
        GenericFoo<Boolean> foo1 = new GenericFoo<Boolean>();

        foo1.setFoo(new Boolean(true));
        Boolean b = foo1.getFoo();

       }
}

那么“推断通用类型参数”的作用是:

  1. 自动推断泛型参数的类型。
  2. 删除不必要的类型转换。

使用时看到的

于 2013-12-31T08:50:03.633 回答
3

Eclipse 帮助

在确定所有可能进行此替换的位置后,将泛型类型的原始类型替换为参数化类型。
可用:项目、包和类型
选项:'假设 clone() 返回接收器类型的实例'。行为良好的类通常会遵守此规则,但如果您知道您的代码违反了它,请取消选中该框。

将不受约束的类型参数保留为原始(而不是推断)。如果对例如 ArrayList a 的元素没有限制,取消选中此框将导致 Eclipse 仍然提供通配符参数,将引用替换为 ArrayList。

您可以在页面末尾找到一个示例。

高温高压

于 2012-11-30T08:54:38.370 回答