Tôi đang truy cập một cá thể MongoDB từ Java được viết từ một ứng dụng Rails. Tôi đang lấy các giá trị số nguyên cần được lưu trữ trong một Long, bởi vì chúng có thể vượt quá 32 bit.Lỗi loại lỗi dài khi đọc Trường số nguyên từ MongoDB trong Java
Mã này sẽ biên dịch:
this.profile_uid = (Long)this.profile.get("uid");
Tuy nhiên, tôi nhận được một loại chuyển đổi thời gian chạy lỗi:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
này có lẽ vì lĩnh vực này được trả về bởi Mongo như Integer, nhưng tôi biết rằng một số ID có thể đến như Longs và vì nhiều lý do tôi không thể thay đổi loại được viết cho DB (từ một ứng dụng khác); nó có thể là 32-bit trong một số trường hợp và 64-bit trong những trường hợp khác.
Ứng dụng Java cần xử lý một trong hai và tôi không muốn gặp phải một số loại sự cố cắt hoặc tràn. Tôi muốn đọc nó như là một Long ở phía Java.
Tôi đã thử giải pháp thay thế bên dưới và có vẻ như chạy, nhưng tôi không biết liệu tôi có an toàn với các vấn đề về cắt xén hoặc tràn hay không theo cách này. Tôi không chắc chắn những gì các lớp học Number
trong Java không.
this.profile_uid = ((Number)this.profile.get("uid")).longValue();
Đây có phải là hợp pháp không? Nó có tác dụng phụ gì? Có cách nào khác/tốt hơn không?
bạn có thể kiểm tra loại giá trị trả về bằng cách sử dụng ** instaceof ** và sau đó đưa ra quyết định phù hợp cho việc nhập mã –