我有一个带有以下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)
调用一个costructor很好,但是(int, Integer)
没有解析为辅助构造函数并引起歧义?
答案 0 :(得分:1)
在oracles documentation,我们看到Integer
是一个包含int
的对象。
int
是基本类型,而Integer
是对象。
你允许传递一对任何一种类型的构造函数,但是当你传递两者时,构造函数都不知道该怎么做。
有关详细信息this question有一个很好的细分。