2012-04-23 40 views

Trả lời

7

Java không cho phép điều này.

Tuy nhiên, nếu bạn muốn đạt được loại cú pháp này khi có thể chạy mã trên JVM (và với mã Java khác), bạn có thể xem Groovy, có operator overloading (và bạn cũng có thể sử dụng DSL cho cú pháp ngắn có tác dụng tương tự với việc sử dụng toán tử tùy chỉnh).

Lưu ý rằng việc xác định toán tử tùy chỉnh (không chỉ là quá tải) là một vấn đề lớn trong bất kỳ ngôn ngữ nào, vì bạn sẽ phải thay đổi ngôn từ và ngữ pháp bằng cách nào đó.

+0

Điều đó nói rằng, Java không có quá tải nhà điều hành là một quyết định rất thận trọng - bạn có thể tìm thấy nó tốt nhất để tránh những thứ như vậy. –

+1

@LouisWasserman: như tôi đã nói trong một bình luận khác, tôi hiểu quyết định, nhưng điều đó không làm cho Java rất phù hợp với lập trình toán học một cách không may. Với ma trận, 'a.multiply (b.multiply (c.add (d)) add (e))' không lớn ... NumPy sử dụng tốt quá tải toán tử trong Python. – Bruno

11

Không, Java không thể mở rộng theo cách này. Bạn không thể thêm toán tử và bạn thậm chí không thể quá tải các toán tử dựng sẵn như + - thậm chí các lớp thư viện chuẩn như BigInteger phải sử dụng các phương thức như add() thay vì các toán tử như +.

Scala (một ngôn ngữ JVM tĩnh) được khoảng này bằng cách sử dụng phương pháp các cuộc gọi chứ không phải là các nhà khai thác built-in, và cho phép bất kỳ ký tự trong tên phương pháp, vì vậy bạn có thể xác định phương pháp mới có vẻ như các nhà khai thác, tức là

a + 1 

là cú pháp đường cho:

a.+(1) 
0

không, bạn có thể không quá tải biểu tượng đặc biệt cho các nhà khai thác trong Java.

+1

Tôi không yêu cầu quá tải. Tôi đang yêu cầu tạo một biểu tượng mới. – AedonEtLIRA

+0

trong câu hỏi của bạn, bạn đã sử dụng cả hai cụm từ "mới" và "quá tải" nên có một chút khó hiểu. –

0

Như tất cả những người khác đã nói, bạn hoàn toàn không thể thêm toán tử mới trong Java. Tuy nhiên, các ngôn ngữ JVM khác thân thiện với Java - như Groovy - sẽ cho phép bạn định nghĩa các toán tử mới từ các thẻ điều hành hiện có.

0

số Đọc bài viết này cho một cuộc tranh cãi về việc tại sao họ không nên: http://java.dzone.com/articles/why-java-doesnt-need-operator

Bạn có thể sử dụng một ngôn ngữ khác nhau, như Scala, để đạt được điều này trên nền tảng java. - https://stackoverflow.com/a/1991348/1342121

+2

Bài viết đó được viết rõ ràng bởi một người không thực hiện bất kỳ mã số nào trong Java. Việc có thể nhân các ma trận với quá tải toán tử với NumPy trong Python (ví dụ) là rất thuận tiện cho khả năng đọc so với việc phải gọi các hàm thích của ['RealMatrix.multiply (RealMatrix)'] (http://commons.apache.org/ math/apidocs/org/apache/commons/math3/linear/AbstractRealMatrix.html # multiply% 28org.apache.commons.math3.linear.RealMatrix% 29) ở mọi nơi. – Bruno

+0

đã đồng ý ... Tôi đã không làm được gì nhiều cả, và ngôn ngữ Java dường như không phải là lựa chọn tốt nhất cho điều đó. Nền tảng Java là tuyệt vời cho nó mặc dù – ianpojman

Các vấn đề liên quan