Vin*_*ele 8 java generics methods jvm
我有一个课程,将字符串视为一个集合.这是课程中的两种方法:
@Override
public <B> IndexedSeq<B> map(final Function1<? super Character, B> function) {...}
public RichString map(final Function1<? super Character, Character> function) {...}
Run Code Online (Sandbox Code Playgroud)
只是方法的签名与我的问题相关.现在,Eclipse确实发出警告,表明这两种方法具有相同的擦除功能.但它仍然允许我创建它们,并且它们按预期工作:每当我提供将Character转换为Character的函数时,就会返回RichString,如我所愿.
我的问题是它为什么有用,因为在运行时没有关于泛型类型的信息,并且方法的返回不是方法签名的一部分?当我调用它们时,JVM如何知道调用这两种方法中的哪一种?
编辑:
我认为,在擦除之后,这两种方法将具有以下特征:
@Override
public IndexedSeq map(final Function1<Object, Object> function) {...}
public RichString map(final Function1<Object, Object> function) {...}
Run Code Online (Sandbox Code Playgroud)
这会使它们的区别仅在于返回类型.