Như những người khác đã đề cập, bạn không thể vượt qua một biến lớp học để instanceof
vì một biến lớp học tài liệu tham khảo một thể hiện của một Object, trong khi tay phải của instanceof
có phải là một loại . Tức là, instanceof
không có nghĩa là "y là một thể hiện của đối tượng x", nó có nghĩa là "y là một thể hiện của loại X". Trong trường hợp bạn không biết sự khác biệt giữa một đối tượng và một loại, xem xét:
Object o = new Object();
Ở đây, loại là Object
, và o
là một tham chiếu đến thể hiện của đối tượng với loại đó. Như vậy:
if(o instanceof Object)
là hợp lệ nhưng
if(o instanceof o)
không phải vì o
ở phía bên tay phải là một đối tượng, không phải là một kiểu.
Cụ thể hơn cho trường hợp của bạn, một phiên bản lớp không phải là một loại, nó là một đối tượng (được JVM tạo cho bạn). Trong phương pháp của bạn, Class
là một loại, nhưng clazz
là một đối tượng (tốt, tham chiếu đến một đối tượng)
Điều bạn cần là cách so sánh đối tượng với đối tượng lớp. Nó chỉ ra rằng điều này là phổ biến vì vậy điều này được cung cấp cho bạn như là một phương pháp của đối tượng Class: isInstance()
.
Đây là Doc Java cho isinstance, mà giải thích điều này tốt hơn:
public boolean isInstance(Object obj)
Xác định đối tượng được quy định là nhiệm vụ tương thích với đối tượng đại diện bởi lớp này. Phương thức này là tương đương động của toán tử instanceof ngôn ngữ Java. Phương thức trả về true nếu đối số Object được chỉ định là không null và có thể là truyền đến kiểu tham chiếu được đại diện bởi đối tượng Class này mà không cần tăng ClassCastException. Nó trả về false nếu không.
Cụ thể, nếu đối tượng Lớp này đại diện cho lớp được khai báo, phương thức trả về true nếu đối số Đối tượng được chỉ định là một thể hiện của lớp đại diện (hoặc của bất kỳ lớp con nào); nó trả về false nếu không. Nếu đối tượng Class này đại diện cho một lớp mảng, phương thức này trả về true nếu đối số Object đã chỉ định có thể được chuyển đổi thành đối tượng của lớp mảng bằng chuyển đổi danh tính hoặc bằng một chuyển đổi tham chiếu mở rộng; nó trả về false nếu không. Nếu đối tượng Class này đại diện cho một giao diện, phương thức này trả về true nếu lớp hoặc bất kỳ lớp nào của đối số được chỉ định thực hiện giao diện này; nó trả về false nếu không. Nếu đối tượng Lớp này đại diện cho một loại nguyên thủy , phương thức này trả về false.
Tham số: obj - đối tượng để kiểm tra
Returns: đúng nếu obj là một thể hiện của lớp này
Từ: JDK1.1
tôi biết mã là hoàn toàn vô dụng , Tôi chỉ muốn chứng minh sự nhầm lẫn của tôi :) – eric2323223
'Số nguyên' là ** không ** một lớp chữ. 'Integer.class' sẽ là một lớp theo nghĩa đen (xem § 15.8.2 của JLS: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.8.2). Toán tử 'instanceof' nhận một" ReferenceType "(hay còn gọi là tên kiểu) như được chỉ định § 15.20.2 của JLS: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html# 15.20.2 –
Tôi muốn sử dụng 'clazz.isInstance (obj)' vì đối tượng đã được cung cấp. –