每当eclipse中的源代码中缺少泛型时,它就会建议我“推断通用类型参数......”
问题是我不认为“推断通用类型参数......”实际上已经推断过任何东西。它通常没有任何建议。
它适用于哪些场景?它是如何工作的?
有一些案例可以“推断”某些东西 - 日食仍然空白。
答案 0 :(得分: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();
}
}
应用“推断通用类型参数”后,代码将重构为:
// 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 :(得分:3)
来自Eclipse Help:
在识别出可以替换的所有位置之后,用参数化类型替换泛型类型的原始类型 可用:项目,包和类型
选项:'假设clone()返回接收器类型的实例'。表现良好的类通常会遵循此规则,但如果您知道您的代码违反了该规则,请取消选中该框。
保持无约束类型参数原始(而不是推断)。如果对例如元素没有约束ArrayList a,取消选中此框将导致Eclipse仍然提供通配符参数,用ArrayList替换引用。
您可以找到example at the end of the page。
HTH