2017-02-09 5 views
3

J'ai un math Kotlin lib avec le Vec2iclass and primary constructor suivant:Pourquoi Netbeans se plaint de l'ambiguïté alors que Intellij ne place pas

data class Vec2i(override var x: Int, override var y: Int) : Vec2t<Int>() 

Puis Vec2i a, entre plusieurs constructeurs secondaires, celui qui est censé intercepter tous les l'autre number types:

constructor(x: Number, y: Number) : this(x.i, y.i) 

Tout sous Idée compile et fonctionne. J'ai testé l'artefact avec un projet Java séparé.

Le même artefact ne s'exécute pas dans un projet java si je change IDE, Netbeans se plaint d'ambiguïté entre les deux.

Pourquoi? Edit: d'après une analyse plus poussée, il s'est avéré que Netbeans se plaignait parce que l'un des coordonnées était int, l'autre Integer. Essayer la même chose sur l'idée, il dit:

ne peut pas résoudre constructeur

Alors, pourquoi appeler un costructor avec (int, int) ou (Integer, Integer) est très bien, mais (int, Integer) n'a pas résolu au constructeur secondaire et provoquent ambiguïté?

+0

http://stackoverflow.com/questions/564/what-is-the-difference-between-an-int-and-an-integer-in-java-and-c – hellyale

+0

Uhm, clair, si vous voulez pour répondre, je vais accepter que – elect

+0

pas sûr que ce soit suffisant pour une réponse, je pensais juste que cela aiderait. – hellyale

Répondre

1

A oracles documentation nous voyons que Integer est un objet qui contient un int.

int est un type primitif, alors que Integer est un objet.

Les constructeurs que vous avez permettent de transmettre une paire de deux types, mais lorsque vous passez à la fois le constructeur ne sait pas quoi faire.

Pour plus d'informations this question a une bonne répartition.