Có một thư viện hiện có cho phép tôi chú thích một phương thức Java như @Const, do đó trình biên dịch (sử dụng apt I presume) sẽ đánh dấu một lỗi nếu nó cập nhật một trường hoặc gọi phương thức không phải @ Const trên một trường ; và chú giải một tham số là @Const, sao cho phương thức chấp nhận không thể gọi bất kỳ phương thức nào không phải là @ Const, hoặc cập nhật bất kỳ trường nào của nó?Const tính chính xác trong Java bằng cách sử dụng chú thích?
(Về cơ bản, cố gắng để thêm const-đúng đắn để Java sử dụng các chú thích, có một số chi tiết rõ ràng không được đề cập trong câu hỏi trên, chẳng hạn như gán đến/từ một @ tham số Const, đánh máy, vv)
Tôi đã tìm thấy điều này: http://confluence.atlassian.com/pages/viewpage.action?pageId=182158080 nhưng có vẻ như nó chỉ có sẵn như là một phần của IDEA.
Sau một Yêu cầu làm rõ dưới đây, đây là mẫu mã để hiển thị những gì tôi muốn nói:
class Person {
private String name;
private String address;
@Const public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
... etc. for address
}
Bây giờ, nếu tôi xác định một phương pháp như:
void processPerson(@Const Person p)
một dòng như: p.getName()
sẽ là OK trong processPerson
, kể từ getName
đã được đánh dấu là phương thức @Const. Nhưng gọi số p.setName()
từ trong phạm vi processPerson
sẽ bị gắn cờ là lỗi.
Lưu ý rằng điều này là rất khác nhau từ final
: nếu tham số được định nghĩa là final Person p
, bất kỳ chuyển nhượng tới p
sẽ là bất hợp pháp, nhưng nó vẫn hoàn toàn hợp lệ để thay đổi những gì p
đề cập đến (hoặc sử dụng p.setName(...)
hoặc thậm chí nhiều hơn nữa trực tiếp, với p.name = ...
.
bạn có cố gắng sử dụng từ khóa 'final' cho mục đích này không? Có gì sai với nó? – AlexR
phương pháp cuối cùng là phương pháp không thể ghi đè. Đó là khác nhau. – aioobe
Tôi có nghĩa là không phải phương pháp cuối cùng. Tôi có nghĩa là đối số cuối cùng. Tôi biết phương thức cuối cùng là gì :) – AlexR