Tôi tĩnh biên dịch lại một thư viện Java sử dụng generics rất nhiều, như Collection<?>
, nhưng tệp .NET được phát ra chỉ sử dụng Collection
, không phải với các tham số kiểu. Làm thế nào mà?Không hỗ trợ IKVM.net generics (loại tham số)?
Trả lời
Generics Java được xử lý bởi trình biên dịch Java và được chuyển đổi thành phiên bản không chung chung tại thời gian biên dịch. Điều này khác với .NET nơi CLR có hỗ trợ lớp đầu tiên cho các tham số kiểu. Ở cấp độ bytecode, ArrayList<T>
sẽ chỉ đơn giản là ArrayList
.
Để báo Java docs:
Generics được thực hiện bởi trình biên dịch Java là một chuyển đổi front-end gọi tẩy xoá, mà là quá trình dịch hoặc viết lại mã có sử dụng Generics vào mã phi generic (tức là, ánh xạ cú pháp mới tới đặc tả JVM hiện tại). Nói cách khác, chuyển đổi này sẽ xóa tất cả thông tin loại chung; tất cả thông tin giữa các dấu ngoặc nhọn sẽ bị xóa. Ví dụ:
LinkedList<Integer>
sẽ trở thànhLinkedList
. Sử dụng các biến kiểu khác được thay thế bằng giới hạn trên của biến kiểu (ví dụ,Object
), và khi mã kết quả không đúng, thì một phép chèn vào kiểu thích hợp được chèn vào.
- 1. Java Generics loại tham số ẩn
- 2. MongoDB có hỗ trợ các loại điểm động không?
- 3. Trợ giúp với lỗi C# generics - "Loại 'T' phải là loại giá trị không thể null"
- 4. Generics Java với nhiều tham số
- 5. C# generics có hỗ trợ các ràng buộc chữ ký kiểu không?
- 6. Các generics Java truyền tham số
- 7. Chỉ định loại phương tiện được hỗ trợ khi gửi "415 loại phương tiện không được hỗ trợ"
- 8. Các loại bảng được sử dụng không hỗ trợ chỉ số KHÔNG GIAN
- 9. rJava generics loại
- 10. C++ có hỗ trợ tham chiếu hàm thành viên không?
- 11. CouchDB có hỗ trợ tính toàn vẹn tham chiếu không?
- 12. Hỗ trợ Mã VS2010 có hỗ trợ nUnit không?
- 13. Nhận loại tham số chung
- 14. Maven: lỗi: generics không được hỗ trợ trong nguồn 1.3, tôi đang sử dụng 1.6
- 15. SQL VIEW Loại dữ liệu không được hỗ trợ
- 16. Ruby có hỗ trợ loại gợi ý không?
- 17. Lỗi Loại: giải mã Unicode không được hỗ trợ
- 18. Thông thạo nHibernate: Loại bản đồ không được hỗ trợ
- 19. Lỗi Loại: 'str' không hỗ trợ giao diện đệm
- 20. Loại kho khóa .jks có hỗ trợ Android không?
- 21. ActionBar (Hỗ trợ) với Fragment (hỗ trợ)
- 22. Dapper có hỗ trợ Enums không?
- 23. Có trình tạo URL hỗ trợ nối tham số yêu cầu không?
- 24. Tại sao không hỗ trợ một đối tượng với giao diện như một tham số?
- 25. Các mục trùng lặp không được hỗ trợ bởi tham số "Tài nguyên"
- 26. Dịch vụ vị trí góc $ có hỗ trợ nhiều tham số không?
- 27. WCF: hoạt động với tham số ngoài không được hỗ trợ
- 28. SVN có hỗ trợ một số loại nhận xét trong thuộc tính của nó không?
- 29. Tại sao Java Generics không hỗ trợ các kiểu nguyên thủy?
- 30. Generics và chú thích java không được hỗ trợ trong phiên bản 1.3 (tích hợp travis)
Tôi không thích Generics Java vì lý do này. Generics nên có được một tính năng chính, nhưng thay vào đó nó không nhiều hơn so với cú pháp đường để tránh đúc 'đối tượng' để một loại cụ thể. Đường là tuyệt vời, nhưng nó có thể đã được nhiều hơn nữa. Mumble các loại và do đó, thực sự làm tăng giá trị mặc dù, do đó, nó không phải tất cả xấu. – Joren
@ Joren, bạn đang không cần thiết khắc nghiệt trên generics. Trong khi loại xóa là chắc chắn dissappointing, generics chắc chắn là một bước rõ ràng lên trên có để đúc từ Object như chúng tôi bây giờ có thể có tất cả các bảo đảm thời gian biên dịch của hệ thống loại Java với các lớp học genericized của chúng tôi. – Falaina
Nhưng thông tin chung vẫn có sẵn trong tệp lớp được biên dịch dưới dạng siêu dữ liệu (nếu không 'javac' sẽ không thể kiểm tra Generics). Không thể IKVM sử dụng thông tin này? –