Il a clairement dit créer une méthode equals()
, et vous l'avez eu ici aussi. Mais même après tout cela, vous avez créé une méthode nommée instanceOf()
. Pourquoi?
En outre, vous pouvez obtenir un ClassCastException sur cette ligne, dans le cas où un autre type d'objet est passé.
if ((Position)a instanceof Position)
Ce qui signifie que, précisément, que vous ne devez jeter le object
-Position
, après s'être assuré que le object
passé est de type Position
. Ce qui signifie maintenant qu'il est bon d'aller plus loin avec la comparaison. Si ce n'est pas de type Position
en premier lieu, alors pourquoi devriez-vous la peine de le comparer davantage. Parce que ça ne peut jamais être égal. J'espère que vous obtenez mon point.
[modifié pour répondre à la question dans le commentaire]
Eh bien, l'instance réelle devrait être de position de type. Une fois que nous savons qu'il est de type Position en utilisant l'opérateur instanceof, nous savons qu'il est prudent de le convertir en type Position à partir du type Object. Maintenant, la question est de savoir pourquoi nous devons lancer? Parce que initialement l'instance était de type Object, et nous n'étions pas sûrs du type réel. Vous savez peut-être déjà que Java peut affecter n'importe quel type à un type d'objet, car Object est un parent de toutes les classes de Java. Par conséquent, avant d'appliquer instanceof, nous n'étions pas sûrs du type d'instance. Si vous ne le lancez pas, vous ne pourrez jamais accéder à ses propriétés, à savoir x, y et id. Vous pouvez essayer d'accéder à l'un de ces objets sur un objet réel sans le lancer. Vous saurez que vous ne pouvez pas. Par conséquent, vous ne pouvez pas les comparer non plus. J'espère que cela a été clair.
Vos instructions ont une touche défectueuse: voir http: // stackoverflow.com/questions/596462/any-reason-to-prefer-getclass-over-instanceof-when-generation-vaut – Raedwald