洞穴夜莺
本帖最后由 洞穴夜莺 于 2021-7-16 09:17 编辑

某Mod在ecj下编译不通过,其原因如下
java.util.Map定义了java.util.Map.Entry
it.unimi.dsi.fastutil.longs.Long2ObjectMap继承了java.util.Map并定义了it.unimi.dsi.fastutil.longs.Long2ObjectMap.Entry
it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap继承了it.unimi.dsi.fastutil.longs.Long2ObjectMap
该Mod定义一变量类型为it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap.Entry,ecj认为是歧义引用而编译不通过,而javac则将其编译为it.unimi.dsi.fastutil.longs.Long2ObjectMap.Entry

请问在Java语言规范11版中,是否规定了此种引用应当如何处理?我应该给谁发issue?

版**:@dengyu @贺兰兰

ABlueCat
emm刚刚我试了我用的fastutil包是7.2版本的,这个版本并没有it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap.Entry这个接口,只有it.unimi.dsi.fastutil.longs.Long2ObjectMap.Entry
(这个问题让我有点迷糊)

洞穴夜莺
dengyu 发表于 2021-7-15 17:14
emm刚刚我试了我用的fastutil包是7.2版本的,这个版本并没有it.unimi.dsi.fastutil.longs.Long2ObjectLinke ...

本来就没有it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap.Entry这个接口

但是it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap继承it.unimi.dsi.fastutil.longs.Long2ObjectMap

他用it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap.Entry指代it.unimi.dsi.fastutil.longs.Long2ObjectMap.Entry,而实现的另一个接口java.util.Map中也存在一个Entry,这是否存在歧义?

ABlueCat
本帖最后由 dengyu 于 2021-7-15 18:19 编辑


(反编译仅用于研究使用)
it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap并没有继承it.unimi.dsi.fastutil.longs.Long2ObjectMap,如果必要请发源代码分析。
另,对于歧义的问题,一般使用完整的包名来指定你要引用的类



(虽然还是有点蒙)
(对了,我这“main”函数只是随便写的图一乐的方法,不是入口main函数)

下一页 最后一页