【发布时间】:2017-02-09 14:37:37
【问题描述】:
我有一个带有以下 Vec2i class and primary constructor 的 kotlin 数学库:
data class Vec2i(override var x: Int, override var y: Int) : Vec2t<Int>()
那么Vec2i 也有,在几个二级构造函数中,一个应该拦截所有其他的number types:
constructor(x: Number, y: Number) : this(x.i, y.i)
Idea 下的所有内容都编译并运行。我用一个单独的 java 项目测试了这个工件。
如果我切换 IDE,相同的工件不会在 java 项目中运行,Netbeans 抱怨两者之间存在歧义。
为什么?
编辑:经过进一步分析,Netbeans 抱怨是因为其中一个坐标是int,另一个是Integer。
在 Idea 上尝试同样的方法,它说:
无法解析构造函数
那么,为什么用(int, int) 或(Integer, Integer) 调用协构函数很好,但(int, Integer) 没有解析为辅助构造函数并引起歧义?
【问题讨论】:
-
嗯,清楚,如果你想回答,我会接受的
-
不确定这是否足以回答,我只是认为它会有所帮助。
-
嗯,一开始它似乎有帮助,但
(Integer, Integer)工作的事实让我感到困惑.. 我不知道如何解释 -
构造函数有 x: Number 等。整数继承自 Number,所以它被视为一个 docs.oracle.com/javase/7/docs/api/java/lang/Integer.html
标签: java intellij-idea netbeans kotlin ambiguity