如何在Eclipse中使用"推断通用类型参数..."

Mic*_*les 7 java eclipse generics

每当eclipse中的源代码遗漏了泛型时,它就会建议我"推断通用类型参数......"

问题是我不认为"推断通用类型参数......"实际上已经推断出任何东西.它通常没有提出任何建议.

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

有几种情况可以"推断"某些东西 - 日食仍然空白.

Bri*_*ian 8

这是一个显示如何在eclipse中使用"推断通用类型参数"的示例:

首先声明一个泛型类

//GenericFoo.java

public class GenericFoo<T> {
    private T foo;

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

    public T getFoo() {
       return foo;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

// GenericFooUsage.java before refactoring

public class GenericFooUsage {

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

        foo1.setFoo(new Boolean(true));
        Boolean b = (Boolean)foo1.getFoo();
    }
}
Run Code Online (Sandbox Code Playgroud)

应用"推断通用类型参数"后,代码将重构为:

// GenericFooUsage.java after refactoring

public class GenericFooUsage {

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

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

       }
}
Run Code Online (Sandbox Code Playgroud)

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

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

使用


tue*_*ist 3

来自Eclipse 帮助:

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

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

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

华泰