Tôi không nghĩ rằng bất cứ ai nhưng các nhà thiết kế của ngôn ngữ có thể có thể trả lời câu hỏi này. Tôi không phải là một chuyên gia về chủ đề này, nhưng tôi sẽ chỉ đưa ra ý kiến của tôi.
Bằng cách đọc JLS 15.12 về Biểu thức yêu cầu phương pháp, rõ ràng là việc chọn phương thức đúng để thực thi là một quá trình biên dịch đã phức tạp; trên tất cả sau khi giới thiệu generics.
Bây giờ hãy tưởng tượng di chuyển tất cả điều này sang thời gian chạy chỉ để hỗ trợ tính năng duy nhất của mutimethods. Đối với tôi, nó có vẻ giống như một tính năng nhỏ làm tăng thêm độ phức tạp cho ngôn ngữ và có thể là một tính năng với một số tác động hiệu quả nhất định mà tất cả các quyết định này sẽ cần phải được thực hiện, lặp đi lặp lại, trong thời gian chạy và không chỉ một lần, như ngày nay, tại thời điểm biên dịch.
Để tất cả những điều này, chúng tôi có thể thêm thực tế là do type erasure sẽ không thể xác định loại thực tế của một số loại chung nhất định. Dường như với tôi rằng việc bỏ qua sự an toàn của việc kiểm tra kiểu tĩnh không phải là lợi ích tốt nhất của Java.
Ở mức độ nào, có các lựa chọn thay thế hợp lệ để xử lý vấn đề nhiều công văn, và có lẽ các giải pháp thay thế này khá nhiều biện minh tại sao nó chưa được triển khai bằng ngôn ngữ. Vì vậy, bạn có thể sử dụng cổ điển visitor pattern hoặc bạn có thể sử dụng một số lượng phản ánh nhất định.
Có lỗi MultiJava Project đã triển khai mutiple gửi hỗ trợ trong Java và có một vài dự án khác ngoài đó sử dụng sự phản chiếu để hỗ trợ đa phương thức trong Java: Java Multimethods, Java Multimethods Framework. Có lẽ còn nhiều hơn nữa.
Bạn cũng có thể xem xét ngôn ngữ dựa trên Java thay thế hỗ trợ đa phương thức, như Clojure hoặc Groovy.
Ngoài ra, vì C# là một ngôn ngữ khá giống với Java trong phillosopy nói chung của nó, nó có thể là thú vị để điều tra thêm về cách nó supports multimethods và suy ngẫm về những gì sẽ là những tác động của việc cung cấp một tính năng tương tự trong Java. Nếu bạn nghĩ rằng đó là một tính năng đáng có trong Java, bạn thậm chí có thể gửi một JEP và nó có thể được tính đến cho các phiên bản tương lai của ngôn ngữ Java.
Tôi đang cố gắng tưởng tượng cách ngữ nghĩa sẽ hoạt động theo cách tiếp cận này và bộ não của tôi chỉ "ew". Tôi mong đợi để có thể thay đổi việc thực hiện tôi đang sử dụng một giao diện, và có phần còn lại của mã hoạt động chính xác như nhau. –
Bởi vì cố gắng cố gắng để xác định kiểu thời gian chạy của một đối tượng sẽ giống như chỉ đơn giản là chạy chương trình? – Perception
@Perception Anh ấy hỏi lý do tại sao quá tải công văn không thể được trì hoãn để chạy thay vì giải quyết tại thời gian biên dịch. Điều đó nghe có vẻ như nó sẽ thêm phức tạp rất lớn vào JVM và logic tải lớp. –