2010-07-07 39 views
5

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?

+2

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

Trả lời

3

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

0

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.

+0

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

+0

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

0

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
0

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!

Các vấn đề liên quan