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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告