Tại sao phải khai báo một Chuỗi (là cuối cùng) và sau đó sử dụng nó?


8

Trong một lớp trình xác nhận mvc lò xo điển hình, trong khi chèn giá trị errorCode vào đối tượng lỗi, nó tạo ra sự khác biệt gì giữa việc sử dụng String ( props.somefield.req) như vậy

errors.rejectValue("elementId", "props.somefield.req");

câu một chuỗi tĩnh cuối cùng được khai báo?

private static final String SOMFIELD_REQ = "props.somefield.req"; ...
errors.rejectValue("elementId", SOMFIELD_REQ);

Liệu nó có cải thiện hiệu suất ngay cả trong một cách nhỏ nhất? Tôi đã đọc một vài câu hỏi về tràn ngăn xếp ( Chuỗi và cuối cùng , Có ý nghĩa gì khi xác định Chuỗi cuối cùng trong Java không? ) Nhưng không ai có thể trả lời câu hỏi cập nhật câu hỏi này.


2
meta bit: lý do mà không ai từng trả lời là vì phần mở rộng cho các câu hỏi hiện tại thực sự không tạo ra câu hỏi hay. Những thứ như 'Cập nhật' và 'Chỉnh sửa' là dấu hiệu của câu hỏi leo (nếu câu hỏi leo là bản sao? Hoặc nếu ai đó trả lời bản cập nhật nhưng không phải bản gốc? Hoặc bản gốc nhưng không phải bản cập nhật? - câu hỏi tiếp theo trong câu hỏi mới là chính sách tốt nhất)

Mỗi chuỗi chỉ đọc được sử dụng nhiều lần có thể được đưa vào trường cuối cùng tĩnh, nếu chỉ để tránh lỗi nhập sai hoặc có thể cấu trúc lại. Đối với những chữ chỉ được sử dụng một lần tôi nghĩ nó không thực sự quan trọng.
Trilarion

Câu trả lời:


21

Trong thời gian chạy, nó không tạo ra sự khác biệt.

Vấn đề là khả năng đọc - như một biến thành viên, nó có thể được khai báo ở đầu mã nguồn của lớp và làm cho nó tĩnh có nghĩa là nó không phải được phân bổ cho mỗi phiên bản mới của lớp.

Làm cho nó cuối cùng biểu thị cho người đọc rằng giá trị sẽ không thay đổi (với trình biên dịch cũng vậy, nhưng điều đó ít quan trọng hơn ở đây).

Theo cách này, không có "giá trị ma thuật" nào bị chôn vùi trong quá trình thực hiện và nếu muốn thay đổi thành "hằng số", thì chỉ cần thay đổi ở một nơi.

Điều này về cơ bản bắt chước những gì một lập trình viên C sẽ làm với #define.


2
+1 hiệu suất đạt được là không liên quan, tất cả là về khả năng đọc, khả năng duy trì và ý định.
vui mừng

5

final lĩnh vực có nhiều lợi ích!

Khai báo các trường finalcó lợi ích tài liệu có giá trị cho các nhà phát triển muốn sử dụng hoặc mở rộng lớp của bạn - không chỉ giúp giải thích cách hoạt động của lớp mà còn giúp người biên soạn trợ giúp trong việc thực thi các quyết định thiết kế của bạn. Không giống như các finalphương thức, khai báo trường cuối cùng giúp trình tối ưu hóa đưa ra quyết định tối ưu hóa tốt hơn , bởi vì nếu trình biên dịch biết giá trị của trường sẽ không thay đổi, nó có thể lưu trữ giá trị trong bộ đăng ký một cách an toàn . finalcác trường cũng cung cấp một mức độ an toàn bổ sung bằng cách yêu cầu trình biên dịch thực thi rằng một trường chỉ đọc.

Đừng cố sử dụng finalnhư một công cụ quản lý hiệu suất. Có nhiều cách tốt hơn, ít ràng buộc hơn để nâng cao hiệu suất chương trình của bạn. Sử dụng finalkhi nó phản ánh ngữ nghĩa cơ bản của chương trình của bạn: để chỉ ra rằng các lớp được dự định là bất biến hoặc các trường được dự định là chỉ đọc.

Trước khi khai báo các trường cuối cùng, bạn nên tự hỏi: trường này có thực sự cần phải thay đổi không?

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.