2012-02-01 40 views
6

Tôi lấy Vector từ API của sản phẩm.[java.lang.String; không thể truyền tới java.lang.String

Vector<?> dataVector = dataAPI.getReturnVector(); 

Vectơ được dự kiến ​​sẽ chứa chuỗi dưới dạng giá trị. Tôi có thể in kích thước của vector là 2. Nhưng vì một lý do nào đó tôi không thể lặp lại và in các giá trị.

tôi đã cố gắng

Iterator<?> iter = dataVector.iterator(); 

while(iter.hasNext()) { 
    System.out.println(iter.next()); 
} 

tôi luôn luôn kết thúc nhận được một

[java.lang.String; cannot be cast to java.lang.String 

tôi đã sử dụng

iter.next().getClass().getName() 

và nó bật ra được java.lang.String chỉ.

Tôi googled một chút và tìm thấy một vấn đề tương tự tại http://prideafrica.blogspot.com/2007/01/javalangclasscastexception.html

Tôi cố gắng để thiết lập các Generics như String[], nhưng kết thúc với cùng một lỗi.

Nếu véc tơ có chứa java.lang.String, tại sao tôi nhận được ngoại lệ truyền này? Làm thế nào tôi có thể in các giá trị thực tế?

Vui lòng cung cấp đề xuất của bạn.

+1

Dấu chấm phẩy đó đến từ đâu? –

+4

Thông báo lỗi có thể bắt đầu bằng dấu ngoặc mở như '[java.lang.String;'? Đó sẽ là tên nội bộ của một mảng String. –

+0

Ồ vâng, nó bắt đầu với một cú đúp mở [. Xin lỗi vì đã bỏ lỡ điều đó. Tôi không biết rằng nó sẽ tạo nên sự khác biệt. – jobinbasani

Trả lời

7

Vì vậy, API không trả lại Vector chuỗi nhưng một Vector chuỗi [].

Bạn sẽ có thể lặp qua vectơ và sau đó, đối với mỗi phần tử, lặp qua mảng đó.

Iterator<String[]> iter = dataVector.iterator(); 

while(iter.hasNext()) { 
    String[] array = iter.next(); 
    for(int i=0; i < array.length; i++) 
    { 
     System.out.println(i + ": " + array[i]); 
    } 
} 
+0

Cảm ơn! Điều này sẽ làm việc. trong trường hợp của tôi, như bạn đã nói Vector đã trả về String []. Đối với một số tiền chuộc, phương pháp api không 'điền vào' các mảng String như mong đợi ... – jobinbasani

4

Hãy thử so sánh các trình nạp lớp học của chúng. Nếu chúng khác nhau, thì ngoại lệ này xảy ra.

StringClass1.getClassLoader()==StringClass2.getClassLoader(); 
+0

Hình như một cái gì đó đang cố gắng để đúc một mảng 'String' đến 'String'. –

1

Không cần sử dụng trình lặp. Bạn chỉ có thể sử dụng phương thức elementAt(index) của Vector s để in các giá trị. Sử dụng vòng lặp For để lấy chỉ số của Vector.

Ví dụ:

Vector<?> dataVector = dataAPI.getReturnVector(); 
for(int i = 0; i < dataVector.size(); i++) { 
    System.out.println(dataVector.elementAt(i)); 
} 

Nếu bạn đang nhận được một câu trả lời lạ (các con số và chữ cái), bạn nhận được một đối tượng String[]. Điều đó có nghĩa là bạn sẽ phải sử dụng phương thức tích hợp Arrays để in mảng String[]. Xem các bình luận bên dưới.

+0

Nó in [Ljava.lang.String; @ 25a091 [Ljava.lang.String; @ 50a11a – jobinbasani

+0

@whoopy_whale: Bạn có thể làm 'System.out.println (Arrays.toString (dataVector.elementAt (i)));'. –

+1

@ βнɛƨнǤʋяʋиɢ Để sử dụng Arrays.toString, tôi đã phải sử dụng Generics như Vector và đầu ra là [] [] – jobinbasani

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