Java 中的執行時型別識別


執行時型別識別,簡稱 RTTI,是一種在執行時檢索物件型別的功能。它對於多型性至關重要,因為在這個面向物件程式設計的功能中,我們必須確定將執行哪個方法。我們還可以將其應用於基本資料型別,例如整數、雙精度數和其他資料型別。在本文中,我們將透過示例解釋 Java 中執行時型別識別的用例。執行時型別識別程式讓我們討論一些可以幫助我們識別物件型別的方法:instanceOf 它是一個比較運算子,用於檢查物件是否為指定類的例項。它的返回型別是布林值,如果物件是給定類的例項,則返回 true,否則返回 false。

語法

nameOfObject instanceOf nameOfClass;

getClass()

它是“java.lang”包的方法,用於返回指定物件的執行時類。它不接受任何引數。

語法

nameOfObject.getClass();

這是呼叫此方法的一般語法。

getName()

它返回指定類中給定類物件的實體(例如類、介面和基元)的名稱。它的返回型別是字串。

語法

nameOfClassobject.getName();

示例 1

以下示例說明了 instanceOf 的用法。

public class Main {
   public static void main(String[] args) {
      String st1 = "Tutorials Point";
      if(st1 instanceof String) {
         System.out.println("Yes! st1 belongs to String");
      } else {
         System.out.println("No! st1 not belongs to String");
      }
   }
}

輸出

Yes! st1 belongs to String

在上面的程式碼中,我們宣告並初始化了一個字串。if-else 程式碼塊使用“instanceOf”檢查“st1”是否為字串型別。

示例 2

在下面的示例中,我們使用 getClass() 和 getName() 方法比較兩個物件是否為同一型別。

import java.util.*;
class Student {
   String name;
   int regd;
   Student(String name, int regd) { 
   // Constructor
      this.name = name;
      this.regd = regd;
   }
}
public class Main {
   public static void main(String[] args) {
	// creating objects of Class student
      Student st1 = new Student("Tutorialspoint", 235); 
      Student st2 = new Student("Tutorix", 2011); 
      // retrieving class name
   	Class cls1 = st1.getClass(); 
      Class cls2 = st2.getClass();
      // checking whether name of objects are same or not
      if(cls1.getName() == cls2.getName()) {
         System.out.println("Both objects belongs to same class");
      } else {
         System.out.println("Both objects not belongs to same class");
      }
   }
}

輸出

Both objects belongs to same class

示例 3

在這個特定示例中,我們將宣告並初始化兩個基元及其相應的包裝類。然後,使用 getClass() 獲取其類的名稱。

public class Main {
   public static void main(String[] args) {
      double d1 = 50.66;
      int i1 = 108;
	   // Wrapper class of double and integer
      Double data1 = Double.valueOf(d1);
      Integer data2 = Integer.valueOf(i1);
      System.out.println("Value of data1 = " + data1 + ", its type: " +  data1.getClass());
      System.out.println("Value of data2 = " + data2 + ", its type: " + data2.getClass());
   }
}

輸出

Value of data1 = 50.66, its type: class java.lang.Double
Value of data2 = 108, its type: class java.lang.Integer

結論

在本文中,我們探討了執行時型別識別,它更像是型別內省。當我們需要比較兩個物件以及在多型性期間使用此功能時,因為它允許我們檢索有關類、介面等的 資訊。

更新於: 2023年5月15日

674 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.