2012-09-28 43 views
16

Trong Java, có an toàn không khi giả định rằng getClass() được gọi bên trong một hàm tạo của một lớp được sử dụng làm lớp cơ sở sẽ cung cấp thông tin về lớp dẫn xuất, thay vì lớp của lớp cơ sở?Lớp nào có getClass() báo cáo bên trong một hàm tạo của một lớp cơ sở

Dường như nó hoạt động, nhưng tôi đoán điều đó không nhất thiết có nghĩa là nó an toàn. Ví dụ, nếu tôi có hai loại sau đây:

public class Parent { 
    public Parent() { 
     System.out.println(getClass().getName()); 
    } 
} 

Và:

public class Derived extends Parent { 
    public Derived() { 
     super(); 
    } 

    public static void main(String... args) { 
     new Derived(); 
    } 
} 

Khi tôi chạy phương pháp main() trong lớp Derived nó in: Derived (đó là những gì tôi đã hy vọng) . Nhưng tôi có thể dựa vào hành vi đó trên các JVM không?

+1

Tôi sẽ sử dụng nó cho mục đích ghi nhật ký. –

+0

từ API java doc, ** Trả về lớp thời gian chạy của một đối tượng. Đối tượng Class đó là đối tượng bị khóa bởi các phương thức được đồng bộ hóa tĩnh của lớp được biểu diễn. ** – user1406062

+0

Cho dù đó là "an toàn" hay không, tôi sẽ nói điều đó phụ thuộc rất nhiều vào những gì bạn định làm với nó. Bạn có thực sự chỉ cần đăng nhập tên? Điều đó không có vẻ hữu ích trong thời gian dài, nhưng có, điều đó sẽ "an toàn" và sẽ in ra tên lớp thực tế được khởi tạo trong thời gian chạy. – jrajav

Trả lời

13

getClass là một trong những phương pháp and returns the runtime class of thisObject 's:

Trả về lớp thời gian chạy của đối tượng này. Đối tượng Class được trả về là đối tượng bị khóa bởi các phương thức được đồng bộ hóa tĩnh của lớp được biểu diễn.

Vì vậy, có, nó sẽ luôn trả lại Derived.

Các vấn đề liên quan