Javaで「instanceof」を使う[リピート]


Use of"instanceof"in Java[duplicate]
What is the 'instanceof' operator used for? 「instanceof」演算子とは?
I learned that Java has the instanceof operator.Javaにはinstanceof演算子があることを知っています.Can you elaborate where it is used and what are its advantages? その使用場所とメリットを詳しく説明できますか?
1階
参照先:https://stackoom.com/question/vA4h/Javaでの-instanceof-繰り返しの使用
2階
instanceof is a keyword that can be used to test if an object is of a specified type.instanceofは、オブジェクトが指定されたタイプであるかどうかをテストするためのキーワードです.
Example:例:
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");
    } 
} 

Here is my source.これは私のソースです.
#3階instanceof is used to check if an object is an instance of a class,an instance of a subclass,or an instance of a class that implements a particular interface.instanceofオブジェクトがクラスのインスタンスであるかどうか、サブクラスのインスタンス、または特定のインタフェースを実装するクラスの例を調べるために使用される.
Read more from the Oracle language definition here.Oracle言語定義の詳細を参照してください.
#4階
Basically,you check if an object is an instance of a specific class.基本的には、オブジェクトが特定のクラスのインスタンスであるかどうかを確認します.You normally use it,when you have a reference or parameter to an object that is of a super class or interface type and need to know wheter the actual object has some other type(normally more concrete).スーパークラスまたはインタフェースタイプのオブジェクトの参照またはパラメータがあり、実際のオブジェクトが他のタイプ(通常はより具体的)を持っているかどうかを知る必要がある場合、通常使用されます.
Example:例:
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"); 
  }
}

Note that if you have to use that operator very often it is generally a hint that your design has some flaws.この演算子をよく使用すると、通常、設計に欠陥があることを示すことに注意してください.So in a well designed application you should have to use that operator as little as possible(of course there are exceptions to that general rule)です.したがって、設計の良いアプリケーションでは、この演算子をできるだけ少なく使用する必要があります(もちろん、この一般的なルールにも例外があります).
#5階instanceof can be used to determine the actual type of an object: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);
}