Bỏ qua một Setter / Getter ở Lombok


232

Tôi muốn sử dụng một lớp dữ liệu trong Lombok. Vì nó có khoảng một tá trường, tôi đã chú thích nó @Datađể tạo ra tất cả các setters và getter. Tuy nhiên, có một lĩnh vực đặc biệt mà tôi không muốn người truy cập thực hiện.

Làm thế nào để Lombok bỏ qua lĩnh vực này?

Câu trả lời:


415

Bạn có thể vượt qua một cấp độ truy cập đến @Getter@Setterchú thích. Điều này rất hữu ích để làm cho getters hoặc setters được bảo vệ hoặc riêng tư. Nó cũng có thể được sử dụng để ghi đè mặc định.

Với @Data, bạn có quyền truy cập công khai vào các bộ truy cập theo mặc định. Bây giờ bạn có thể sử dụng cấp truy cập đặc biệt NONEđể bỏ hoàn toàn trình truy cập , như thế này:

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;

1
Hoàn hảo. Nếu trường riêng là POJO và cũng được chú thích bằng @Delegate (), thì trường đó có thể được sử dụng để trích xuất một tập các thuộc tính vào một lớp có thể tái sử dụng riêng. Điều này có thể hữu ích khi có cùng một tập các thuộc tính được áp dụng cho nhiều lớp (loại mixin để thêm thuộc tính). Ví dụ, một mixin đại diện cho một tập hợp các thuộc tính có thể áp dụng để mô hình hóa các yếu tố XML khác nhau.
xorcus

Bạn có điều tương tự với việc bỏ qua một trường trong trình xây dựng không?
zt1983811

1
Bạn có nghĩa là thuộc tính không nên hiển thị trong trình xây dựng? Không, không có gì trực tiếp cho việc này. Hãy nhớ rằng mặc dù @Buildercó thể được đặt trên các hàm và hàm tạo cũng như các lớp và chỉ cung cấp cài đặt các thuộc tính xuất hiện trong chữ ký của hàm đó.
Michael Piefel

Nó không triển khai bất kỳ setter và getter nào cho thuộc tính này trong đó @Data bao gồm setters và getters theo mặc định. mà sẽ được loại trừ bằng cách đề cập AccessLevel.NONE.
Ram

41

Theo mô tả @Data bạn có thể sử dụng:

Tất cả các getters và setters được tạo sẽ được công khai. Để ghi đè cấp truy cập, chú thích trường hoặc lớp bằng chú thích @Setter và / hoặc @Getter rõ ràng. Bạn cũng có thể sử dụng chú thích này (bằng cách kết hợp nó với AccessLevel.NONE) để ngăn chặn việc tạo ra một getter và / hoặc setter hoàn toàn.


0

Sử dụng mã dưới đây để bỏ qua / loại trừ khỏi việc tạo setter và getter.

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;

Phiên bản khởi động mùa xuân 2.3 , điều này đang hoạt động tốt.


-3

Nếu bạn có setter và getter là private, nó sẽ xuất hiện trong kiểm tra PMD.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.