【发布时间】:2013-05-01 08:51:44
【问题描述】:
我有一个类将字符串视为一个集合。这是该类中的两个方法:
@Override
public <B> IndexedSeq<B> map(final Function1<? super Character, B> function) {...}
public RichString map(final Function1<? super Character, Character> function) {...}
只是方法中的签名与我的问题有关。 现在,Eclipse 确实发出警告,表明这两种方法具有相同的擦除。但它仍然允许我创建它们,并且它们按预期工作:每当我提供一个将字符转换为字符的函数时,都会返回一个 RichString,正如我想要的那样。
我的问题是为什么它会起作用,因为在运行时没有关于泛型类型的信息,并且方法的返回不是方法签名的一部分?当我调用它们时,JVM 怎么知道要调用这两个方法中的哪一个?
编辑:
我认为,在擦除之后,这两种方法将具有以下签名:
@Override
public IndexedSeq map(final Function1<Object, Object> function) {...}
public RichString map(final Function1<Object, Object> function) {...}
这将使它们仅在返回类型上有所不同。
【问题讨论】: