Apakah tanda tangan metode dalam kelas / antarmuka Java menyertakan tipe kembaliannya?
Contoh:
Apakah Java mengetahui perbedaan antara kedua metode tersebut:
public class Foo {
public int myMethod(int param) {}
public char myMethod(int param) {}
}
Atau mungkin hanya nama metode dan daftar parameter yang penting?
java
method-signature
faressoft
sumber
sumber
Jawaban:
Mengutip dari Oracle Docs :
Sejak pertanyaan diedit untuk memasukkan contoh ini:
Tidak, kompilator tidak akan tahu perbedaannya, karena tanda tangannya:
myMethod(int param)
sama. Baris kedua:akan memberi Anda kesalahan: metode sudah ditentukan di kelas , yang selanjutnya menegaskan pernyataan di atas.
sumber
foo.bar(baz);
?Di Java, tidak, tetapi di JVM ini, hal itu dapat menyebabkan kebingungan yang jelas.
Sama seperti untuk metode kelas.
Nama metode dan tipe parameter untuk Java. Misalnya, anotasi parameter dan nama tidak penting.
sumber
Pada tingkat bytecode, "tipe pengembalian" adalah bagian dari tanda tangan metode. Pertimbangkan ini
dalam bytecode ada 2 metode clone ()
mereka hanya berbeda dalam tipe pengembalian.
sumber
Tidak, tidak di Jawa. Nama metode dan daftar parameter hanya untuk tanda tangan metode . Jenis pengembalian tidak termasuk.
sumber
Spesifikasi Bahasa Java mengatakan
jadi Tidak, tipe pengembalian bukan bagian dari tanda tangan metode.
sumber
Di JAVA dan banyak bahasa lainnya, Anda dapat memanggil metode tanpa variabel untuk menampung nilai yang dikembalikan. Jika tipe kembalian adalah bagian dari tanda tangan metode, tidak ada cara untuk mengetahui metode mana yang akan dipanggil saat memanggil tanpa menentukan variabel yang menahan nilai kembalian.
sumber
Bro, Di java, kami menggunakan untuk memanggil metode dengan namanya dan parameternya hanya untuk menggunakannya dalam kode kami, seperti
myMethod (20, 40)
jadi, JAVA hanya mencari hal serupa yang cocok di deklarasi yang sesuai (nama + param), inilah mengapa tanda tangan metode hanya menyertakan nama dan parameter metode. :)
sumber
Tanda tangan metode hanya nama dan daftar parameter.
sumber
tidak, di Java tanda tangan metode tidak menyertakan tipe kembalian, tetapi deklarasi menyertakannya.
diedit berdasarkan umpan balik di bawah :)
sumber
String method( String s )
dan beradaDouble method( String s )
di kelas yang sama, misalnya.method signature
denganmethod declaration
Jenis pengembalian tidak termasuk dalam tanda tangan metode. Hanya pengembalian metode. Hanya nama metode dan Parameter yang ditentukan sebagai tanda tangan metode.
Referensi: Oracle Docs 'Defining Methods'
sumber
Menggunakan AspectJ (org.aspectj.lang.reflect.MethodSignature), ia memang memiliki tipe kembalian
sumber
METODE TANDA TANGAN TERMASUK JENIS PENGEMBALIAN.
Kompilator mengabaikannya ketika harus memeriksa duplikat. Untuk Java adalah ilegal untuk memiliki dua metode dengan tanda tangan yang dibedakan hanya dengan tipe kembalian.
Coba itu:
Bangun proyek, buka direktori bin, salin Caller.cass di suatu tempat. Kemudian ubah metode yang dipanggil:
Bangun proyek, Anda akan melihat bahwa Called.class dan Caller.class memiliki stempel waktu baru. Ganti Caller.class di atas dan jalankan proyek. Anda akan memiliki pengecualian:
sumber
Tanda tangan metode hanya nama dan parameter metode. Tapi saya yakin contoh Anda akan menghasilkan kesalahan jika mereka berada di kelas yang sama. Anda cukup mengujinya pada ide apa pun dan melihat bahwa kompiler akan mengeluarkan kesalahan
sumber
Jika Anda mencoba menjalankan kode yang Anda sebutkan di eclipse, Anda akan mendapat jawaban tentang elemen apa yang dicari oleh java compiler untuk membedakan di antara metode java:
Kesalahan yang dilemparkan adalah: Metode duplikat myMethod (int) dengan tipe Foo.
sumber