为什么Netbeans抱怨歧义,而Intellij却没有

时间:2017-02-09 14:37:38

标签: java intellij-idea netbeans kotlin ambiguity

我有一个带有以下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)没有解析为辅助构造函数并引起歧义?

1 个答案:

答案 0 :(得分:1)

oracles documentation,我们看到Integer是一个包含int的对象。

int是基本类型,而Integer是对象。

你允许传递一对任何一种类型的构造函数,但是当你传递两者时,构造函数都不知道该怎么做。

有关详细信息this question有一个很好的细分。