Khi tôi hiểu chúng, Generics là một tính năng thời gian biên dịch của Java, và thông tin kiểu parametrized không tồn tại trong mã byte biên dịch. Bây giờ tôi đã phát hiện ra phương thứC# getGenericType và Method # getGenericReturnType, do đó làm tan vỡ tầm nhìn thế giới của tôi. Xin hãy giúp tôi ghép lại với nhau.loại java xóa với Field # getGenericType và Method # getGenericReturnType
Trả lời
Khi bạn đang xử lý một lọ mã bytecode được biên dịch trong IDE của mình, bạn vẫn có thể tự động hoàn thành chung. Đây là cách nó được thực hiện. Về cơ bản bạn nói đúng: loại không hoàn toàn bị xóa.
Các loại đối tượng thời gian chạy chỉ được xóa. Ví dụ:
Object obj = new ArrayList<String>();
obj.getClass()
sẽ trở lại ArrayList.class
. Bạn thậm chí có thể nói rằng ArrayList
có thông số chung. Nhưng không có cách nào để biết liệu obj
đã được tạo là ArrayList<String>
, ArrayList<Integer>
, ArrayList<Object>
, ArrayList
(nguyên) hay bất kỳ thứ gì khác.
Thông tin kiểu tĩnh vẫn còn cho lớp, phương pháp, v.v. (mặc dù không dành cho người dân địa phương). Đây chỉ là một chút dữ liệu được thêm vào dưới dạng các thuộc tính trong tệp lớp và có sẵn khi chạy. Hãy nghĩ về nó giống như chú thích với lưu giữ thời gian chạy. Có một câu hỏi?
Thông tin kiểu chung chung cho trường và phương thức phải có trong tệp lớp đã biên dịch, để khi bạn biên dịch mã nguồn khác, trình biên dịch có thể thực hiện kiểm tra kiểu. Ví dụ: khi bạn viết mã sử dụng biến loại ArrayList<E>
và gọi phương thức get()
trên đó, bạn không có mã nguồn cho lớp ArrayList
. Trình biên dịch đi và xem xét tệp lớp đã biên dịch và nhận kiểu trả về chung của phương thức get()
và nhận ra rằng nó trả về kiểu generic E
, để nó có thể kiểm tra kiểu. Vì vậy, thông tin kiểu chung phải có mặt để trình biên dịch có thể kiểm tra nó.
- 1. Java Constructor và Field Initialization Order
- 2. gọi method generic với Loại biến
- 3. Khi nào nên sử dụng $ HTTP_POST_VARS ['field'] và $ _POST ['field']?
- 4. Tránh loại tẩy xóa Java
- 5. hiện loại Java xóa xóa loại chung của tôi?
- 6. Java: Overriding hoặc Overloading method?
- 7. Java constructor/method với tham số tùy chọn?
- 8. gọi method Java vararg từ Scala với nguyên thủy
- 9. loại thô và Generics - Java
- 10. set_error_handler với tĩnh-method callback
- 11. removeGestureRecognizer method
- 12. Sự khác biệt giữa FieldLinks và Field trong Sharepoint
- 13. Java Reflection getDeclaredMethod() với các loại lớp
- 14. SQLAlchemy ORDER BY FIELD()
- 15. Spring 3 @Component và static factory method
- 16. Java getConstructor (loại) với các loại parametised
- 17. oracle datetime field indexing
- 18. Các loại chung được lưu trữ trong các tệp lớp java ở đâu?
- 19. mối quan hệ giữa "Field of View" và "lens Length"
- 20. C# Execute Method (with Parameters) với ThreadPool
- 21. Java Iterator với nhiều loại nguyên thủy
- 22. Private Static Readonly Field Capitalization
- 23. <init> và (Native Method) có nghĩa là gì?
- 24. Sự khác nhau giữa Dòng # getAnnotations() và Field # getDeclaredAnnotations()
- 25. mongoose (mongodb) Alias _id field
- 26. Có loại xóa haskell không?
- 27. Text Field sử dụng Hibernate Chú
- 28. xóa tập tin với phương pháp xóa() trong Java
- 29. thread remove local method
- 30. Overriding Equals method trong Structs