Java でオブジェクトのタイプを取得する

Rupam Yadav 2023年10月12日
  1. Java で getClass() を使用してオブジェクトタイプを取得する
  2. Java で instanceOf を使用してオブジェクトタイプを取得する
  3. Java で手動で作成されたクラスオブジェクトの型を取得する
Java でオブジェクトのタイプを取得する

この記事では、Java でオブジェクトの型を取得する方法を学習します。オブジェクトがソースからのものである場合は、オブジェクトタイプを確認すると便利です。API やアクセスできないプライベートクラスなど、オブジェクトの種類を確認できない場所です。

Java で getClass() を使用してオブジェクトタイプを取得する

最初のメソッドでは、整数文字列などのラッパークラスのオブジェクトのタイプを確認します。タイプをチェックするために、var1var2 の 2つのオブジェクトがあります。Java のすべてのオブジェクトの親クラスである Object クラスの getClass() メソッドを使用します。

if 条件を使用してクラスをチェックします。ラッパークラスには型を返すフィールドクラスも含まれているため、どの型が var1 および var2 と一致するかを確認できます。以下では、3つのタイプで両方のオブジェクトをチェックします。

public class ObjectType {
  public static void main(String[] args) {
    Object var1 = Integer.valueOf("15");
    Object var2 = String.valueOf(var1);

    if (var1.getClass() == Integer.class) {
      System.out.println("var1 is an Integer");
    } else if (var1.getClass() == String.class) {
      System.out.println("var1 is a String");
    } else if (var1.getClass() == Double.class) {
      System.out.println("var1 is a Double");
    }

    if (var2.getClass() == Integer.class) {
      System.out.println("var2 is an Integer");
    } else if (var2.getClass() == String.class) {
      System.out.println("var2 is a String");
    } else if (var2.getClass() == Double.class) {
      System.out.println("var2 is a Double");
    }
  }
}

出力:

var1 is an Integer
var2 is a String

Java で instanceOf を使用してオブジェクトタイプを取得する

Java でオブジェクトの型を取得する別の方法は、instanceOf 関数を使用することです。オブジェクトのインスタンスが指定されたクラスと一致する場合に返されます。この例では、次の 3つのタイプでチェックされるオブジェクト var1var2 があります:IntegerString、および Double;いずれかの条件が満たされた場合、別のコードを実行できます。

var1 のタイプは Integer であるため、条件 var1 instanceOf Integer が true になり、var2Double になるため、var2 instanceOf Double が true になります。

public class ObjectType {
  public static void main(String[] args) {
    Object var1 = Integer.valueOf("15");
    Object var2 = Double.valueOf("10");

    if (var1 instanceof Integer) {
      System.out.println("var1 is an Integer");
    } else if (var1 instanceof String) {
      System.out.println("var1 is a String");
    } else if (var1 instanceof Double) {
      System.out.println("var1 is a Double");
    }

    if (var2 instanceof Integer) {
      System.out.println("var2 is an Integer");
    } else if (var2 instanceof String) {
      System.out.println("var2 is a String");
    } else if (var2 instanceof Double) {
      System.out.println("var2 is a Double");
    }
  }
}

出力:

var1 is an Integer
var2 is a Double

Java で手動で作成されたクラスオブジェクトの型を取得する

ラッパークラスのタイプを確認しましたが、この例では、手動で作成された 3つのクラスの 3つのオブジェクトのタイプを取得します。ObjectType2ObjectType3ObjectType4 の 3つのクラスを作成します。

ObjectType3ObjectType4 を継承し、ObjectType2ObjectType3 を継承します。ここで、これらすべてのクラスのオブジェクトのタイプを知りたいと思います。objobj2、および obj3 の 3つのオブジェクトがあります。上記の例で説明した getClass()instanceOf の両方のメソッドを使用します。

ただし、obj2 のタイプには違いがあります。obj2 変数は、クラスが ObjectType3 であるのに対し、タイプ ObjectType4 を返しました。これは、ObjectType3ObjectType4 クラスを継承し、instanceOf がすべてのクラスとサブクラスをチェックするために発生します。getClass() 関数は直接クラスのみをチェックするため、objObjectType3 を返しました。

public class ObjectType {
  public static void main(String[] args) {
    Object obj = new ObjectType2();
    Object obj2 = new ObjectType3();
    Object obj3 = new ObjectType4();

    if (obj.getClass() == ObjectType4.class) {
      System.out.println("obj is of type ObjectType4");
    } else if (obj.getClass() == ObjectType3.class) {
      System.out.println("obj is of type ObjectType3");
    } else if (obj.getClass() == ObjectType2.class) {
      System.out.println("obj is of type ObjectType2");
    }

    if (obj2 instanceof ObjectType4) {
      System.out.println("obj2 is an instance of ObjectType4");
    } else if (obj2 instanceof ObjectType3) {
      System.out.println("obj2 is an instance of ObjectType3");
    } else if (obj2 instanceof ObjectType2) {
      System.out.println("obj2 is an instance of ObjectType2");
    }

    if (obj3 instanceof ObjectType4) {
      System.out.println("obj3 is an instance of ObjectType4");
    } else if (obj3 instanceof ObjectType3) {
      System.out.println("obj3 is an instance of ObjectType3");
    } else if (obj3 instanceof ObjectType2) {
      System.out.println("obj3 is an instance of ObjectType2");
    }
  }
}

class ObjectType2 extends ObjectType3 {
  int getAValue3() {
    System.out.println(getAValue2());
    a = 300;
    return a;
  }
}

class ObjectType3 extends ObjectType4 {
  int getAValue2() {
    System.out.println(getAValue1());
    a = 200;
    return a;
  }
}

class ObjectType4 {
  int a = 50;

  int getAValue1() {
    a = 100;
    return a;
  }
}

出力:

obj is of type ObjectType2
obj2 is an instance of ObjectType4
obj3 is an instance of ObjectType4
著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

関連記事 - Java Object