Tại sao java sử dụng chú thích @Override, thay vì một công cụ sửa đổi?


19

Động lực để java sử dụng @Overridechú thích, thay vì tạo một công cụ overridesửa đổi mới là gì?

@Override
public String toString() {
   return "";
}

so với

public override String toString() {
   return "";
}

2
Đó là một suy nghĩ lại.
Tulains Córdova

Câu trả lời:


21

@Override ban đầu không có trong ngôn ngữ. Khi cần thêm nó, việc sử dụng một cơ chế chung (chú thích) sẽ dễ dàng hơn so với việc thêm một từ khóa mới vào ngôn ngữ. Thêm một từ khóa mới luôn là một thay đổi không tương thích vì nó có thể phá vỡ các chương trình sử dụng các từ đó làm định danh.

Trong các ngôn ngữ có thêm dấu hiệu ghi đè ngay từ ngày đầu tiên, nó thường là một từ khóa (ví dụ là Kotlin và Scala), trong Java, vấn đề là tương thích ngược với phiên bản Java cũ hơn mà không có bất kỳ dấu hiệu ghi đè nào.


Dường như không nhất quán rằng ghi đè là một chú thích, khi có những thay đổi đã đưa ra các từ khóa mới. Ví dụ: công cụ sửa đổi "mặc định" cho các phương thức giao diện.
jwa

6
@jwa Không thực sự: defaultđã là một từ khóa dành riêng (được sử dụng trong các câu lệnh chuyển đổi) - họ chỉ thêm một cách sử dụng mới cho nó. Ngoài ra còn có một số từ khóa không làm gì ngay bây giờ nhưng được dành riêng cho sử dụng trong tương lai (const, goto) - xem JLS §3.9
Michał Kosmulski

3
"Ví dụ là Kotlin và Java" trông giống như một lỗi đánh máy ở đây, ý bạn là viết ví dụ Scala thay vì Java?
gnat

6
trong khi sự thật là việc thêm các từ khóa toàn cầu sẽ phá vỡ mọi thứ, nó có thể đã được thêm vào như một từ khóa theo ngữ cảnh mà không phá vỡ mã. người ta cho rằng điều này không được thực hiện vì nó sẽ làm phức tạp việc phân tích cú pháp và cơ chế chú thích là đủ tốt
jk.

1
@ MichałKosmulski: Tôi nhớ enumtừ khóa được thêm vào sẽ phá vỡ mã cũ hơn. Nhiều từ khóa phá vỡ hơn tại đây: stackoverflow.com/questions/16506411
Allon Guralnek

13

Bạn không cần chú thích @Override để thực sự ghi đè hành vi; Đó là một chú thích bởi vì nó chỉ đơn giản là thêm một số bối cảnh về ý định của phương thức cho trình biên dịch, không thay đổi chính phương thức đó.

Nếu không có chú thích, bạn có thể có ý định ghi đè chức năng, nhưng vô tình không thực hiện được (bằng cách sử dụng chữ ký hơi khác). Việc thêm chú thích sẽ cho trình biên dịch tạo ra lỗi nếu phương thức này không thực sự ghi đè hành vi.

Như vậy, nó có ý nghĩa hoàn hảo như một chú thích.


+1 Điều này có nghĩa là tương tự như vô hiệu hóa các cảnh báo thông qua các chú thích, cũng có thể kích hoạt các cảnh báo / lỗi tùy chọn thông qua các chú thích.
Hulk
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.