不,两个签名不相同。根据Java语言规范的第8章:
如果两个方法具有相同的名称和参数类型,则它们具有相同的签名。
如果满足以下所有条件,则两个方法或构造函数声明M和N具有相同的参数类型:
- 它们具有相同数量的形式参数(可能为零)
- 它们具有相同数量的类型参数 (可能为零)
…
由于两种方法共享的类型参数数量不同,因此签名也不相同。
在实际情况下,使用隐式类型参数调用方法时,它们可能被视为可互换的。但这仅在源代码级别,而不在二进制级别。换句话说,如果您
work()在类中具有一个类型参数的版本,并且在类中
Foo被一个方法调用
Bar,然后切换到的两个类型参数的版本
work()并重新编译
Foo,则还需要重新编译
Bar。
编辑
@onepotato问:
如果它们没有相同的签名,那么为什么当我将它们复制并粘贴到一个类中时,Eclipse告诉我它们具有相同的方法签名?
两个签名 相等 和两个签名 冲突 (“等效”)之间存在区别。如果一个签名是另一个的子签名,则两个签名冲突。稍后在同一部分中对此进行说明:
当m1是m2的子签名或m2是m1的子签名时,两个方法签名m1和m2是等效的。
在类中声明两个具有重写等效签名的方法是编译时错误。
如果满足以下任一条件,则方法m1的签名是方法m2的签名的子签名:
- m2与m1具有相同的签名,或者
- m1的签名与m2的签名的擦除(第4.6节)相同。



