2011-11-26 34 views
10

Tôi mới bắt đầu sử dụng phiên bản beta 7 của Netbeans và nó đang gọi ra lỗi của một kiểu mà tôi chưa từng thấy trước đây. Cụ thể là:Tại sao tôi không thể có các trường công cộng tĩnh trong các bean được quản lý của mình?

A managed bean with a public field should not declare any scope other than @Dependent.

Các trường nó được phàn nàn về là public static final. Tôi có thể hiểu được những hạn chế trên các lĩnh vực không tĩnh, nhưng tôi không thể nghĩ ra một lý do chính đáng mà điều này sẽ không được phép cho một trường tĩnh. Thật không may tôi sử dụng rất nhiều trong số họ vì tôi không thích có hằng số trong mã của tôi.

Tôi lưu ý rằng mặc dù tôi nhận được dấu chấm màu đỏ ở lề trong trình chỉnh sửa, công cụ xây dựng maven vẫn hoạt động và GlassFish vẫn chạy ứng dụng của tôi theo cách tôi mong đợi.

Vì vậy, tôi bị từ chối gì về vấn đề này? Tôi sẽ phải di chuyển các lĩnh vực tĩnh của tôi ở nơi khác hoặc có cách nào khác để xử lý điều này?

+2

Lưu ý: JSF không cấm điều đó. Đó là Netbeans, người thực hiện điều đó vì một số lý do không rõ ràng, có lẽ do một số hạn chế về CDI. Vì nó là một phiên bản beta, tôi chỉ báo cáo một lỗi cho các chàng trai Netbeans. – BalusC

Trả lời

5

Trích dẫn các javax.enterprise.injectpackage javadocs:

Nếu một bean được quản lý có một lĩnh vực công cộng, nó phải có phạm vi @Dependent.

Nhưng tôi đồng ý wih @BalusC rằng nếu điều này biên dịch, Netbeans nên báo cáo nó như Warning (hiện nó?).

Dù sao, các hằng số đó có thực sự là một phần của API không? Ý tôi là, bạn có truy cập chúng ở bất kỳ nơi nào khác ngoài các lớp học của riêng họ không? Nếu không, hãy giảm khả năng hiển thị ở chế độ riêng tư. (Nếu bạn chỉ cần truy cập vào các hằng số từ khung nhìn, bạn cũng có thể tạo các trình truy cập cho hằng số riêng). Nếu có, tôi sẽ đề nghị bạn di chuyển chúng ở một nơi khác.

+0

NetBeans 7.1 beta (không phải các phiên bản trước) đánh dấu dòng lớp có dấu chấm màu đỏ ở lề trái. Tuy nhiên, lỗi đó không mở rộng đến cửa sổ dự án theo cách các lỗi khác thực hiện. Bạn nói đúng rằng nhiều hằng số của tôi có thể được chỉ định riêng tư thay vì công khai, và tôi có thể tái cấu trúc các hằng số có thể xuất khẩu thành getters (không phải là setters!). Điều này làm tôi ngạc nhiên, mặc dù. Hầu hết các yêu cầu JSF có ý nghĩa trực quan khi bạn kiểm tra chúng; cái này vẫn không. – AlanObject

+0

Cố định phần bộ phận ngắt để tham khảo thêm, trường hợp xấu của nhà phát triển mệt mỏi cao trên cà phê sau nửa đêm hehehe. Dù sao, nếu bạn muốn báo cáo lỗi cho nhóm Netbeans, tại đây (http://netbeans.org/community/issues.html) của địa điểm. Nếu nó biên dịch và chạy tốt, có thể nhóm Netbeans đã giải thích sai về [thông số kỹ thuật] (http://jcp.org/aboutJava/communityprocess/final/jsr299/index.html) (hoặc có thể các thông số không rõ ràng về các biến tĩnh, và nó được để lại dưới dạng chi tiết cụ thể về triển khai ...). Chỉ trong trường hợp, đọc các thông số kỹ thuật và được chuẩn bị cho một cuộc tranh luận cạnh mở nó đi theo con đường đó. –

+1

Dưới đây là trích dẫn từ các thông số được liên kết: (Trang 27, - 3.1 Đậu được quản lý): 'Nếu một bean được quản lý có trường công khai khai báo bất kỳ phạm vi nào khác ngoài @Dependent, vùng chứa sẽ tự động phát hiện sự cố và xử lý Định nghĩa lỗi.' Nó không nói gì về các biến lớp so với các trường đối tượng, nhưng có lẽ đây là một câu hỏi hay cho Gavin King: D. –

4

Trường công khai (tĩnh hay không) không được ủy quyền - đó là lý do tại sao chúng chỉ có thể phụ thuộc vào phạm vi. Để làm việc xung quanh điều này, bạn rõ ràng có thể truy cập chúng thông qua các phương thức getter.

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