Tolong bisakah Anda memberi tahu saya jika ada kemungkinan untuk membebani operator di Jawa? Jika digunakan di mana saja di Jawa, tolong beri tahu saya.
java
operator-overloading
Vipul
sumber
sumber
Jawaban:
Tidak, Java tidak mendukung overloading operator yang ditentukan pengguna. Satu-satunya aspek Java yang mendekati "overloading" custom "operator adalah penanganan + untuk string, yang menghasilkan hasil kompilasi konstanta waktu kompilasi atau penggabungan waktu eksekusi menggunakan StringBuilder / StringBuffer. Anda tidak dapat menentukan operator Anda sendiri yang bertindak dengan cara yang sama.
Untuk bahasa Jawa-seperti (dan JVM-based) yang tidak operator overloading dukungan, Anda bisa melihat Kotlin atau Groovy . Atau, Anda mungkin menemukan keberuntungan dengan solusi plugin kompiler Java .
sumber
BigInteger
di Java, lalu lihat kode yang sama menggunakanBigInteger
di C # menggunakan operator. Saya tidak melihat bagaimana para delegasi melanggar prinsip-prinsip OOP - Anda harus lebih tepat dari itu dalam keberatan Anda. Saya tidak tahu detail mengapa desainer Java tidak memasukkan berbagai fitur, tapi saya curiga ada campuran tekanan sumber daya dan keinginan untuk menjaga bahasa tetap kecil dan relatif sederhana.m0
sebagaiMatrix
danv0
,v1
,v2
,v3
, danv4
sebagaiVector
s, hanya membandingkan berapa lama waktu Anda untuk benar menafsirkan ekspresi matematika berikutm0.transpose().mult(v0.add(v1.mult(v2)).cross(v3)).sub(v4);
. Seandainya dukungan untuk operator kelebihan beban sudah dimasukkan, itu bisa saja ditulis sebagaim0.transpose() * (v0 + v1 * v2).cross(v3) - v4;
.Overloading operator digunakan di Jawa untuk rangkaian tipe String:
Namun, Anda tidak dapat menentukan kelebihan operator Anda sendiri.
sumber
Selain semua orang yang menunjukkan bahwa
+
kelebihan beban untuk String,-
juga kelebihan beban untuk operasi floating point dan integer, seperti halnya*
dan/
.[Sunting]
%
juga kelebihan beban untuk floating point, yang bisa sedikit mengejutkan bagi mereka dengan latar belakang C atau C ++.sumber
Java tidak memungkinkan kelebihan operator. Pendekatan yang disukai adalah mendefinisikan metode di kelas Anda untuk melakukan tindakan:
a.add(b)
alih-aliha + b
. Anda dapat melihat ringkasan dari bit lain yang ditinggalkan Java dari bahasa seperti C di sini: Fitur Dihapus dari C dan C ++sumber
Anda tidak dapat melakukan ini sendiri karena Java tidak mengizinkan overloading operator.
Namun, dengan satu pengecualian. + dan + = kelebihan beban untuk objek String.
sumber
&
,,|
dan^
kelebihan beban untukboolean
dan tipe integral. Dan memang, operator aritmatika dan relasional kelebihan beban untuk berbagai jenis numerik. (Tentu saja, semantik yang berlebihan lebih dekat ...)Seperti yang telah dijawab oleh banyak orang lain: Java tidak mendukung overloading operator yang ditentukan pengguna.
Mungkin ini di luar topik, tetapi saya ingin mengomentari beberapa hal yang saya baca dalam beberapa jawaban.
Tentang keterbacaan.
Membandingkan:
Lihat lagi!
Mana yang lebih mudah dibaca?
Bahasa pemrograman yang memungkinkan pembuatan tipe yang ditentukan pengguna, harus memungkinkan mereka untuk bertindak dengan cara yang sama seperti tipe bawaan (atau tipe primitif).
Jadi Java mematahkan prinsip dasar Generic Programming:
Kita harus bisa menukar objek tipe bawaan dengan objek tipe yang ditentukan pengguna.
(Anda mungkin bertanya-tanya: "Apakah dia mengatakan 'objek bawaan'?". Ya, lihat di sini .)
Tentang rangkaian string:
Matematikawan menggunakan simbol + untuk operasi komutatif pada set.
Jadi kita dapat yakin bahwa a + b = b + a.
Rangkaian string (dalam kebanyakan bahasa pemrograman) tidak menghormati notasi matematika yang umum ini.
atau di Jawa:
Ekstra:
Perhatikan bagaimana di Jawa kesetaraan dan identitas bingung. Simbol == (persamaan) berarti:
a. Kesetaraan untuk tipe primitif.
b. Pemeriksaan identitas untuk tipe yang ditentukan pengguna, oleh karena itu, kami dipaksa untuk menggunakan fungsi equals () untuk kesetaraan.
Tapi ... Apa hubungannya ini dengan overloading operator?
Jika bahasa memungkinkan operator overloading pengguna dapat memberikan makna yang tepat kepada operator kesetaraan.
sumber
==
ini digunakan untuk kesetaraan di Jawa, seperti di C dan C ++. Ini tidak ada hubungannya dengan overloading operator.Satu dapat mencoba Java Operator Overloading . Ini memiliki keterbatasannya sendiri, tetapi patut dicoba jika Anda benar-benar ingin menggunakan operator yang berlebihan.
sumber
Cukup gunakan Xtend bersama dengan kode Java Anda. Ini mendukung Kelebihan Operator:
Di situs web resmi, ada daftar metode yang harus diterapkan untuk setiap operator!
sumber
Atau, Anda dapat membuat Java Groovy dan hanya membebani fungsi-fungsi ini untuk mencapai apa yang Anda inginkan
Siapa yang tidak ingin menjadi / menggunakan asyik? : D
Tidak, Anda tidak dapat menggunakan JAR groovy yang dikompilasi di Jawa dengan cara yang sama. Ini masih merupakan kesalahan kompiler untuk Java.
sumber
Tidak seperti C ++, Java tidak mendukung overloading operator yang ditentukan pengguna. Overloading dilakukan secara internal di java.
Kita dapat mengambil
+
(plus) misalnya:Di sini, ditambah menambahkan dua angka integer dan menggabungkan dua string. Jadi kita dapat mengatakan bahwa Java mendukung overloading operator internal tetapi tidak ditentukan pengguna.
sumber