我有一个带有以下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项目测试了 Artifact 。
如果我切换IDE,则同一项目无法在Java项目中运行,Netbeans抱怨两者之间存在歧义。
为什么?
编辑:从进一步的分析,原来Netbeans抱怨,因为坐标之一是
int
,另一个是
Integer
。
在Idea上尝试相同的结果是:
cannot resolve constructor
那么,为什么用
(int, int)
或
(Integer, Integer)
调用构造函数很好,但是
(int, Integer)
不能解析为辅助构造函数并引起歧义?
解决方案如下:
在oracles documentation处,我们看到Integer
是一个保存int
的对象。int
是原始类型,而Integer
是对象。
您拥有的构造函数允许传递两种类型之一,但是当您同时传递两种构造函数时,它们不知道该怎么做。
有关更多信息,this question具有良好的分类。