Trong Java, class java.lang.Class là một entry point của mọi thao tác của reflection API. Trong Java chúng ta có 2 cách để lấy java.lang.Class object:
- Sử dụng Object.getClass() method
- Sử dụng .class
Cách java.lang.Class object trong Java
Method Object.getClass() là một instance method của Object class. Nếu chúng ta có một object, chúng ta có thể gọi object.getClass() để lấy Class object của nó.
Tương tự chúng ta có thể sử dụng ClassName.class để để Class object với kiểu dữ liệu tương ứng.
public class Main { public static void main(String[] args) throws Exception { String str = "I am an object of the String class"; Class fromStrObject = str.getClass(); Class clazz = String.class; System.out.println(fromStrObject); System.out.println(clazz); } }
Output
class java.lang.String class java.lang.String
Runtime Type và Static type
Qua ví dụ trên có thể chúng ta sẽ suy nghĩ rằng 2 cách này hoàn toàn giống nhau, tuy nhiên chúng có một điểm khác biệt lớn đó là:
- object.getClass() sẽ trả về runtime Class object type
- ClassName.class trả về Class object static
Để dễ hiểu hơn chúng ta cùng xem qua ví dụ sau
public class Animal { protected int numberOfEyes; } public class Monkey extends Animal { // monkey stuff }
Bây giờ chúng ta sẽ khởi tạo một Animal object như sau
public class Main { public static void main(String[] args) { Animal animal = new Monkey(); Class runtimeType = animal.getClass(); Class staticType = Animal.class; System.out.println(runtimeType); System.out.println(staticType); } }
Output
class com.deft.Monkey class com.deft.Animal
Chúng ta có thể thấy runtimeType object đã trả về kiểu dữ liệu tại thời điểm runtime là Monkey thay vì Animal như kiểu Animal.class.
Tóm lược
Qua bài viết này chúng ta đã biết cách phân biệt giữa A.class và object.getClass() khác nhau như thế nào.
Nguồn: Baeldung