2013-01-28 16 views
5

Tôi đang cố gắng gửi một số Collection<myClass> trên mạng. Tôi đúc nó như một chiếc Object, và tôi đã gửi nó theo cách này.truyền đối tượng vào loại gốc

Tôi nghĩ cách tốt nhất để mô hình hóa mục được truyền trong mạng là thông qua một đối tượng, vì tôi không biết trước nó có thể là gì (trong ví dụ này, đó là một bộ sưu tập, nhưng một số lần khác Bản đồ hoặc bất kỳ điều nào khác mà bạn có thể nghĩ đến). Điều này sẽ bằng cách nào đó giống như cách ổ cắm hoạt động trong C, nơi chỉ người nhận và người gửi biết họ đang gửi/nhận và truyền các đối tượng một cách thích hợp, trong khi kết nối chỉ quan tâm đến byte và truyền chúng đúng cách.

Tuy nhiên, khi nhận được đối tượng, nếu tôi cố gắng truyền trở lại collection<myObject>, cảnh báo đề cập đến việc truyền kiểu không an toàn. Tôi có thể thêm @suppressWarnings, nhưng cách tốt nhất để thực hiện điều này để tránh cảnh báo này là gì?

Cảm ơn

+2

Giải pháp thích hợp thực sự là '@ SuppressWarnings', nếu bạn chắc chắn dàn diễn viên thực sự an toàn. Bất kỳ giải pháp khác sẽ chỉ ngăn chặn các cảnh báo ở một nơi khác. –

+0

Tôi không muốn bị ràng buộc bởi các công cụ có nghĩa vụ phải giúp tôi, nhưng thực tế là tôi sử dụng 'sonar', và mặc dù tôi thêm @SuppressWarnings, tôi vẫn nhận được một lỗi trong sonar. Có cách nào để vô hiệu hóa cảnh báo sóng siêu âm không? – shkra19

+0

Bạn có chắc chắn cảnh báo SONAR có cùng lý do không? Cảnh báo nói gì? –

Trả lời

3

Như bạn (mặc dù, chủ yếu là Java) không biết loại đối tượng mà bạn nhận được, nó là không thể bỏ nó một cách an toàn.

Thing bạn có thể làm:

  • Bạn cần phải thực sự chắc chắn nó là đối tượng bạn nghĩ rằng đó là
  • Có lẽ thêm một khối try-catch để bắt ClassCastException (có thêm chắc chắn)
  • Và cuối cùng, thêm chú thích @SuppressWarnings, vì bạn muốn ghi đè các kiểm tra an toàn của Java (vì bạn nghĩ để biết rõ hơn)
+0

Ngoài ra, instanceof. – sdasdadas

+0

@sdasdadas không hoạt động, vì bạn chỉ có thể tạo cá thể 'Object' khi nhận dữ liệu. Nếu bạn nghĩ rằng bạn biết những gì bạn nhận được bạn có thể tạo ra một đối tượng của loại khác, nhưng sau đó bạn không cần 'instanceof' nữa. – Veger

+0

Tôi đã có ấn tượng rằng ông đang tìm kiếm một cái gì đó như thế này: http://stackoverflow.com/questions/2651632/how-to-check-if-an-object-is-a-collection-type-in-java nhưng có lẽ tôi hiểu nhầm câu hỏi. – sdasdadas

1

Cân nhắc sử dụng một số liên kết định dạng ediate để tuần tự hóa, như JSON hoặc XML. Có rất nhiều thư viện trên đó để sắp xếp và sắp xếp các đối tượng vào/từ JSON. Ví dụ: GSON. Những gì bạn nhận được miễn phí là khả năng tương tác ngôn ngữ, bởi vì mặt khác của dây có thể là một chương trình bằng bất kỳ ngôn ngữ nào.

+1

+1: nhỏ gọn, sạch sẽ, đơn giản – amphibient

+0

Tôi không chống lại việc sử dụng json hoặc xml (thực tế tôi đã làm như vậy trong một phần khác của dự án), nhưng làm sao thay đổi thực tế là, khi lập trình viên mã hóa mạng một phần, tôi không biết loại đối tượng được truyền vào (chỉ được biết từ người gửi/người nhận)? Tôi đang sử dụng lớp nào, nếu không phải Object? – shkra19

+0

-1 không giải quyết mối quan tâm của OP, và hiệu ứng duy nhất sẽ là di chuyển các diễn viên không an toàn ở nơi khác –