Tôi có một trình phân tích cú pháp được viết bằng ngôn ngữ lập trình hàm bigloo mà tôi cần để biên dịch thành một lớp java. Toàn bộ trình phân tích cú pháp được viết dưới dạng một hàm duy nhất. Thật không may điều này là gây ra trình biên dịch JVM để ném một cảnh báo "Phương pháp quá lớn" và sau đó cung cấp cho "nhãn xa trong localvar" lỗi. Có cách nào có thể để tôi có thể vượt qua lỗi này không? Tôi đọc một nơi nào đó về một tùy chọn DontCompileHugeMethods, nó hoạt động? Tách chức năng doesnt dường như là một lựa chọn khả thi đối với tôi :(!!Làm thế nào để phá vỡ lỗi "Phương pháp quá lớn" trong Java Compilation?
Trả lời
Có cách nào có thể nơi tôi có thể phá vỡ được lỗi này?
Vâng, nguyên nhân gốc rễ của lỗi biên dịch này là trong trường hợp này, vấn đề là một phương pháp duy nhất có thể bao gồm tối đa 65536 byte bytecode. (xem JVM spec)
Cách giải quyết duy nhất là chia phương pháp
Tách phương thức trong các hoạt động liên quan hoặc tách riêng các tiện ích.
Vâng, trường hợp có một chút khác biệt ở đây, phương pháp chỉ bao gồm một cuộc gọi chức năng duy nhất. Bây giờ hàm này có một danh sách tham số rất lớn (toàn bộ trình phân tích cú pháp thực sự !!). Vì vậy, tôi không có manh mối làm thế nào để phân chia này !! – Aditya
Bạn chắc chắn có thể chuyển danh sách các tham số lớn đến các phương thức khác, đúng không? – Sid
Vâng, trường hợp có một chút khác nhau ở đây, phương pháp chỉ bao gồm một cuộc gọi chức năng đơn . Bây giờ chức năng này có một danh sách tham số rất lớn (thực tế là toàn bộ trình phân tích cú pháp thực sự là !!). Vì vậy, tôi không có manh mối làm thế nào để chia này !!
Cách để chia tay như một con thú có thể là:
- xác định đối tượng người giữ dữ liệu cho các thông số của bạn (đặt bộ thông số trong các đối tượng theo quy định của ontology của mô hình dữ liệu của bạn),
- xây dựng các đối tượng giữ dữ liệu đó trong ngữ cảnh riêng của chúng
- chuyển đối tượng tham số đến hàm
Nhanh và bẩn: Gán al l tham số của bạn để biến lớp cùng tên (bạn phải đổi tên tham số của bạn) ở đầu chức năng của bạn và bắt đầu cắt lên chức năng của bạn trong miếng và đặt những miếng trong chức năng. Điều này sẽ đảm bảo rằng chức năng của bạn về cơ bản sẽ hoạt động với cùng ngữ nghĩa.
Nhưng, điều này sẽ không dẫn đến mã đẹp!
- 1. Làm thế nào để phá vỡ một dòng các phương pháp xích trong Python?
- 2. Phá vỡ một enum Java lớn
- 3. Netbeans: Làm thế nào để tôi phá vỡ một NullPointerException?
- 4. Làm thế nào để phá vỡ mọi phương thức của một lớp trong GDB?
- 5. Làm thế nào để phá vỡ một chuỗi trong dòng
- 6. Làm thế nào để phá vỡ một chuỗi lua lớn thành những cái nhỏ
- 7. Phá vỡ vòng lặp for trong Java
- 8. Làm thế nào để phá vỡ nhiều vòng lặp foreach?
- 9. Làm thế nào để phá vỡ hoặc tiếp tục Ext.each
- 10. phương pháp Làm thế nào để gọi quá tải Java trong Clojure
- 11. Làm thế nào để ngăn chặn một phương pháp từ quá tải trong Java?
- 12. Java phương pháp quá tải - nhập nhằng
- 13. Làm cách nào để phá vỡ một phương trình dài trên các dòng?
- 14. Làm thế nào để phá vỡ một chặng đường dài với tuyên bố trong python
- 15. Số lỗi dài quá lớn Java?
- 16. Làm thế nào để quá tải một phương pháp ảo khác với phương pháp phi ảo?
- 17. cho mỗi ... phá vỡ
- 18. Làm cách nào để đổi tên các gói Java mà không phá vỡ lịch sử Subversion?
- 19. Làm thế nào để `phá vỡ một vòng lặp bên ngoài trong đóng cửa (Proc, lambda)?
- 20. Java phương pháp quá tải lựa chọn
- 21. Latex: làm thế nào để phá vỡ dòng trong multirow bên trong bảng
- 22. Làm thế nào để đối phó với những người phá vỡ TDD?
- 23. getSelection() bị phá vỡ trong IE10
- 24. Làm thế nào để có được firebug để phá vỡ ngoại lệ?
- 25. Làm thế nào để loại bỏ một khoảng trắng không bị phá vỡ trong Ruby
- 26. Làm thế nào để đặt một không gian không phá vỡ trong một NSString?
- 27. Làm thế nào để phá vỡ các từ dài trong một bảng td?
- 28. làm thế nào để phá vỡ từ dài trong Span? (Sử dụng Twitter Bootstrap)
- 29. Làm thế nào để phá vỡ một vòng lặp vô hạn cho (;;) trong C?
- 30. Khi Móc Shutdown Phá vỡ Bad
Thay vì hỏi nếu 'DontCompileHugeMethods' hoạt động, tại sao bạn không tự mình thử? Dù sao, có phương pháp rất lớn là một thực tế thực sự xấu. Cố gắng tạo một số hàm trợ giúp để không chỉ giải quyết vấn đề, mà còn làm cho mã của bạn dễ đọc hơn và dễ bảo trì hơn. – pakore