Вопрос-ответ

Use of "instanceof" in Java [duplicate]

Использование "instanceof" в Java

Для чего используется оператор "instanceof"?


Я узнал, что в Java есть оператор instanceof . Не могли бы вы пояснить, где он используется и каковы его преимущества?

Переведено автоматически
Ответ 1

По сути, вы проверяете, является ли объект экземпляром определенного класса. Обычно вы используете его, когда у вас есть ссылка или параметр на объект суперкласса или типа интерфейса и вам нужно знать, имеет ли фактический объект какой-либо другой тип (обычно более конкретный).

Пример:

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");
}
}

Обратите внимание, что если вам приходится использовать этот оператор очень часто, это, как правило, намек на то, что в вашем дизайне есть некоторые недостатки. Таким образом, в хорошо спроектированном приложении вам придется использовать этот оператор как можно реже (конечно, есть исключения из этого общего правила).

Ответ 2

instanceof используется для проверки, является ли объект экземпляром класса, экземпляром подкласса или экземпляром класса, реализующего определенный интерфейс.

Подробнее об определении языка Oracle читайте здесь.

Ответ 3

instanceof может использоваться для определения фактического типа объекта:

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);
}
Ответ 4

instanceof - это ключевое слово, которое можно использовать для проверки, относится ли объект к указанному типу.

Пример :

public class MainClass {
public static void main(String[] a) {

String s = "Hello";
int i = 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");
}
}

Вот мой исходный код.

java