Các phương thức void Java hoàn toàn trả về điều này


20

có một vài cuộc thảo luận về SO về các phương thức setter trả về kiểu "này". Và có vẻ như java 7 đã đề xuất các phương thức void trả về điều này. Nhưng đề xuất này không thể thực hiện với các tính năng java 7. Tôi không thể tìm thấy nếu đề xuất này được chuyển sang java 8 hoặc tương lai hoặc đã bị loại bỏ hoàn toàn. Là nó?

Liên kết tham chiếu - /programming/31584/design-java-and-retinating-elf-reference-in-setter-methods


3
Sẽ có một số liên kết đến cuộc thảo luận mà bạn đã đề cập trong câu hỏi, vì vậy nó sẽ hữu ích cho những người khác và sẽ giúp họ hiểu câu hỏi hơn.
ManuPK

đã chỉnh sửa câu hỏi của tôi
Tarun

Câu trả lời:


11

Tôi dường như không thể tìm thấy bất kỳ nguồn nào trong số đó, nhưng tôi tin rằng tính năng này đã bị loại bỏ hoàn toàn. Có nhiều lý do tôi có thể nghĩ ra:

  • hiệu suất - mỗi voidphương thức hiện có một opcode trả về bổ sung và mọi nơi mà phương thức này được gọi là nhu cầu ngầm poptrừ khi nó thực sự sử dụng chuỗi phương thức

  • khả năng tương thích ngược - biên dịch ngược với tính năng này đột nhiên làm cho mã ngược không tương thích vì hợp đồng của mọi voidphương thức đã thay đổi

Tất nhiên điều này cũng có thể được thực hiện bởi trình biên dịch ( phương thức gọi trên void? Bạn có thể có nghĩa là this, hãy để tôi thêm điều này ngầm ), không biết những nhược điểm của phương pháp này là gì.


1
Trình biên dịch sẽ phải hỗ trợ tính năng này (vì vậy mã gọi sẽ biên dịch) và nó có thể lưu đối tượng được gọi và sử dụng lại mà không cần thay đổi phương thức gọi.
Peter Lawrey

Các tính năng cho OpenJDK về bản chất này hiện được xử lý dưới dạng Đề xuất tăng cường JDK (JEP) và thực sự điều này không còn được liệt kê nữa (và tôi đã không thấy nó được thảo luận trong một thời gian dài).
Martijn Verburg

3

Tôi không tin rằng điều này đã từng được đề xuất chính thức cho dự án COIN năm 2009. Trang này có ý định liệt kê tất cả các đề xuất và tôi không thể thấy một đề xuất tương ứng.

Nếu nó không được đề xuất, nó sẽ không được xem xét.

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.