- A quoi sert l'opérateur "instanceof" en Java ? (20 réponses )
Réponses
Trop de publicités?Fondamentalement, vous vérifier si un objet est une instance d'une classe spécifique. Vous l'utiliser normalement, lorsque vous avez une référence ou d'un paramètre d'un objet qui est d'une super-classe ou le type d'interface et ont besoin de savoir si l'objet a un autre type (normalement plus concret).
Exemple:
public void doSomething(Number param) {
if( param instanceof Double) {
System.out.println("param is a Double");
}
else if( param instanceof Integer) {
System.out.println("param is an Integer");
}
if( param instanceof Comparable) {
//subclasses of Number like Double etc. implement Comparable
//other subclasses might not -> you could pass Number instances that don't implement that interface
System.out.println("param is comparable");
}
}
Notez que si vous devez utiliser l'opérateur, très souvent, il est généralement une indication que votre conception a quelques défauts. Ainsi, dans un système bien conçu de l'application vous devez avoir à utiliser l'opérateur en aussi peu que possible (bien sûr il existe des exceptions à cette règle générale).
instanceof
peut être utilisée pour déterminer la réelle type d'un objet:
class A { }
class C extends A { }
class D extends A { }
public static void testInstance(){
A c = new C();
A d = new D();
Assert.assertTrue(c instanceof A && d instanceof A);
Assert.assertTrue(c instanceof C && d instanceof D);
Assert.assertFalse(c instanceof D);
Assert.assertFalse(d instanceof C);
}
Encore une conception à l'aide de instanceof
est presque toujours considéré comme une mauvaise conception. Dans une bonne conception, si un objet de type réel C
est censé être utilisé comme un objet de type A
alors vous n'êtes pas censé savoir si cet objet est en fait un objet de type C
ou D
! Sinon, cela signifie que vous traitez C
et D
différemment, même si elles ont en commun certaines de paramètres.
Par conséquent, évitez d'utiliser des instanceof
possible que vous pouvez utiliser le polymorphisme de la façon dont il devrait être, en utilisant les interfaces appropriées.
Voici l’exemple lien vérifier cela
http://www.Java-Samples.com/showtutorial.php?tutorialid=332
http://www.java2s.com/tutorial/Java/0060__Operators/TheinstanceofKeyword.htm