考虑以下4种方法
Java pre byteprem1: Byte f(List<Byte> list)f List -> Bytem2: Long f(List<Byte> list)f List -> Longm3: Byte f(List<Long> list)f List -> Bytem4: Long f(List<Long> list)f List -> Long
根据当前的Java语言规范,
m1和m2无法共存,m3和m4也不能共存。因为它们具有相同的参数类型。
M1和M3可以共存,M1和M4也可以共存。因为它们具有不同的参数类型。
但是javac 6仅允许m1 + m4,不允许m1 + m3。这与方法的字节码表示有关,其中包括返回类型。因此,m1 + m4可以,但m1 + m3则不行。
这是Java和JVM规范无法相互对照的一个附加条件。javac没有“正确”的方法。
好消息是,过载是虚荣,而不是必要。对于这些方法,我们总是可以使用不同的,更具描述性的和不同的名称。



