【发布时间】:2016-09-23 16:54:27
【问题描述】:
可能我遗漏了一些东西,也许我的假设是错误的,但我认为当我声明类型为 T 的参数化方法时,无论该类型有多少变量,它仍然是相同的类型。但我看到这是编译的,它反对我的观点。
static <T> void f(T a, T b) { }
public static void main(String[] args) {
f(Integer.MIN_VALUE, "...");
}
因此,如果我的方法使用一种类型进行参数化,并且我在两个参数中使用该一种类型,为什么它允许我发送具有两种完全不同类型的两个对象?我想这归结为将T 视为Object?
【问题讨论】:
-
“我猜它归结为将 T 视为对象?”是的。你也可以声明
static void f(Object a, Object b) {}。 -
更有趣的是,类型擦除甚至会擦除像
static <T, S extends T> void f(T a, S b) { ... }这样的结构