2012-02-18 28 views
8

Tôi có một đối tượng trong java. Có cách nào để kiểm tra nếu một đối tượng là một thể hiện của một String, HashMap, hoặc HashMap [] trước khi thực sự đúc nó cho các đối tượng đó?Kiểm tra xem Object có phải là instance của String, HashMap hay HashMap []

Nếu không, vì nó có vẻ phản trực giác mà ở trên sẽ hoạt động, có cách để đúc nó vào từng đối tượng và kiểm tra điều gì đó về đối tượng mới được đúc để xem thực tế loại đối tượng đúc?

+1

Thay vì sử dụng 'instanceof', bạn luôn có thể chuyển sang kiểu đối tượng được giả định và lắng nghe' ClassCastException'. –

+2

@HotLicks: Đúng vậy. Một khác biệt nhỏ là nếu 'obj' là' null', thì '(obj instanceof ____)' sẽ là 'false', nhưng' ((____) obj) 'sẽ không gây ra ngoại lệ. – ruakh

+0

@ruakh - Đúng. (Và tôi đã không ủng hộ việc sử dụng ngoại lệ bắt vs 'instanceof', chỉ cần chỉ ra rằng nó sẽ làm việc quá.) –

Trả lời

25

Có:

if(obj instanceof String) 
{ 
    String str = (String) obj; 
    . 
    . 
    . 
} 

Bằng cách này, để làm rõ về vấn đề này:

[& hellip;] thử nghiệm điều gì đó về đối tượng mới được đúc để xem nếu nó trong thực tế các loại đối tượng vào mà nó đã được đúc?

Bạn không thể bỏ thứ gì đó vào loại không hợp lệ. Nếu obj có loại String, thì ((Integer)obj) sẽ gây ra một số ClassCastException để được tăng lên trong thời gian chạy.

+1

Một điều cần lưu ý, là 'instanceof' trả về false khi obj là null –

+0

Vì vậy, nếu tôi out.println() đối tượng và tôi thấy "[Ljava.lang.Object; @ 4296e599" điều này có nghĩa là gì? Tôi nghĩ rằng đó là một bản đồ hoặc HashMap nhưng tôi nhận được sai cho những khi thử nghiệm dụ. –

+2

Điều đó có nghĩa là nó có kiểu 'Object []'. Bạn có thể sử dụng 'System.out.println (java.util.Arrays.toString ((Object []) ____))', trong đó '____' là tên biến, để in ra các phần tử của mảng. – ruakh

8

Bạn đang tìm kiếm toán tử instanceof.

Toán tử instanceof so sánh đối tượng với loại được chỉ định. Bạn có thể sử dụng nó để kiểm tra nếu một đối tượng là một thể hiện của một lớp, một thể hiện của một lớp con, hoặc một thể hiện của một lớp thực hiện một giao diện cụ thể.

Ví dụ: "Hello" instanceof String sẽ trở true khi new Integer(5) instanceof String sẽ trở false.

2

Thiết kế của bạn là nghi ngờ nếu bạn phải sử dụng instanceof. Bạn đang kiểm tra xem bạn có một chuỗi, một HashMap, hoặc một mảng HashMap? Sự trừu tượng và thông tin ẩn giấu ở đâu?

Java là ngôn ngữ hướng đối tượng. Tôi không biết bạn đang giải quyết vấn đề gì, nhưng có vẻ như bạn đã thua. Bạn nên nghĩ về một trừu tượng tốt hơn thế này.

+0

Bạn có thể giúp không? Câu hỏi này có liên quan đến http://stackoverflow.com/questions/9337536/iterate-recursively-through-deep-hashmap/9337639#9337639. –

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