Cập nhật: Câu trả lời gốc dưới đây được viết mà không hiểu đầy đủ câu hỏi và do đó không trực tiếp giải quyết câu hỏi :)
Tuy nhiên, nó phải là thông tin cho những ai muốn tìm hiểu cách sử dụng chung của final
từ khóa.
Đối với câu hỏi, tôi muốn trích dẫn nhận xét của riêng tôi từ bên dưới.
Tôi tin rằng bạn không bị buộc phải thực thi tính hữu hạn của một cuộc tranh luận để bạn tự do quyết định liệu nó có nên là cuối cùng hay không trong việc thực hiện của chính bạn.
Nhưng vâng, nghe có vẻ kỳ quặc khi bạn có thể khai báo nó final
trong giao diện, nhưng nó không phải là cuối cùng trong việc thực hiện. Nó sẽ có ý nghĩa hơn nếu một trong hai:
a. final
từ khóa không được phép cho các đối số phương thức giao diện (trừu tượng) (nhưng bạn có thể sử dụng nó trong triển khai) hoặc
b. khai báo một đối số như final
trong giao diện sẽ buộc nó phải được khai báo final
khi thực hiện (nhưng không bắt buộc đối với các trận chung kết).
Tôi có thể nghĩ ra hai lý do tại sao chữ ký phương thức có thể có final
các tham số: Đậu và Đối tượng ( Trên thực tế, cả hai đều có cùng lý do, nhưng bối cảnh hơi khác nhau. )
Các đối tượng:
public static void main(String[] args) {
StringBuilder cookingPot = new StringBuilder("Water ");
addVegetables(cookingPot);
addChicken(cookingPot);
System.out.println(cookingPot.toString());
// ^--- OUTPUT IS: Water Carrot Broccoli Chicken ChickenBroth
// We forgot to add cauliflower. It went into the wrong pot.
}
private static void addVegetables(StringBuilder cookingPot) {
cookingPot.append("Carrot ");
cookingPot.append("Broccoli ");
cookingPot = new StringBuilder(cookingPot.toString());
// ^--- Assignment allowed...
cookingPot.append("Cauliflower ");
}
private static void addChicken(final StringBuilder cookingPot) {
cookingPot.append("Chicken ");
//cookingPot = new StringBuilder(cookingPot.toString());
// ^---- COMPILATION ERROR! It is final.
cookingPot.append("ChickenBroth ");
}
Các final
từ khóa đảm bảo rằng chúng tôi sẽ không vô tình tạo ra một mới địa phương nồi nấu ăn bằng cách hiển thị một lỗi biên dịch khi chúng tôi cố gắng làm như vậy. Điều này đảm bảo nước dùng gà được thêm vào nồi nấu ban đầu của chúng tôi mà addChicken
phương pháp có được. So sánh điều này với addVegetables
nơi chúng tôi mất súp lơ vì nó đã thêm nó vào một nồi nấu địa phương mới thay vì nồi ban đầu mà nó có.
Đậu:
Đó là khái niệm tương tự như các đối tượng (như được hiển thị ở trên) . Đậu chủ yếu Object
là s trong Java. Tuy nhiên, các bean (JavaBeans) được sử dụng trong các ứng dụng khác nhau như một cách thuận tiện để lưu trữ và chuyển xung quanh một bộ sưu tập dữ liệu liên quan được xác định. Giống như việc addVegetables
có thể làm xáo trộn quá trình nấu ăn bằng cách tạo ra một nồi nấu mới StringBuilder
và ném nó đi với súp lơ, nó cũng có thể làm tương tự với nồi nấu JavaBean .
final
dù sao cũng không làm gì với kiểu bản địa, vì chúng được sao chép.