每当 Eclipse 中的源代码中缺少泛型时,它都会建议我“推断泛型类型参数......”
问题是我认为“推断通用类型参数......”实际上并没有推断出任何东西。它通常不会提出任何建议。
它适用于哪些场景?它是如何工作的?
在某些情况下,可以“推断”出一些东西——日食仍然是空白的。
这是一个示例,展示了如何在 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();
}
}
那么“推断通用类型参数”的作用是:
在确定所有可能进行此替换的位置后,将泛型类型的原始类型替换为参数化类型。
可用:项目、包和类型
选项:'假设 clone() 返回接收器类型的实例'。行为良好的类通常会遵守此规则,但如果您知道您的代码违反了它,请取消选中该框。
将不受约束的类型参数保留为原始(而不是推断)。如果对例如 ArrayList a 的元素没有限制,取消选中此框将导致 Eclipse 仍然提供通配符参数,将引用替换为 ArrayList。
您可以在页面末尾找到一个示例。
高温高压