Я узнал, что в Java есть оператор instanceof . Не могли бы вы пояснить, где он используется и каковы его преимущества?
Переведено автоматически
Ответ 1
По сути, вы проверяете, является ли объект экземпляром определенного класса. Обычно вы используете его, когда у вас есть ссылка или параметр на объект суперкласса или типа интерфейса и вам нужно знать, имеет ли фактический объект какой-либо другой тип (обычно более конкретный).
Пример:
publicvoiddoSomething(Number param) { if( param instanceof Double) { System.out.println("param is a Double"); } elseif( 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"); } }
Обратите внимание, что если вам приходится использовать этот оператор очень часто, это, как правило, намек на то, что в вашем дизайне есть некоторые недостатки. Таким образом, в хорошо спроектированном приложении вам придется использовать этот оператор как можно реже (конечно, есть исключения из этого общего правила).
Ответ 2
instanceof используется для проверки, является ли объект экземпляром класса, экземпляром подкласса или экземпляром класса, реализующего определенный интерфейс.
instanceof может использоваться для определения фактического типа объекта:
classA { } classCextendsA { } classDextendsA { }
publicstaticvoidtestInstance(){ Ac=newC(); Ad=newD(); 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); }
Ответ 4
instanceof - это ключевое слово, которое можно использовать для проверки, относится ли объект к указанному типу.
Пример :
publicclassMainClass { publicstaticvoidmain(String[] a) {
Strings="Hello"; inti=0; String g; if (s instanceof java.lang.String) { // This is going to be printed System.out.println("s is a String"); } if (i instanceof Integer) { // This is going to be printed as autoboxing will happen (int -> Integer) System.out.println("i is an Integer"); } if (g instanceof java.lang.String) { // This case is not going to happen because g is not initialized and // therefore is null and instanceof returns false for null. System.out.println("g is a String"); } }