Di beberapa antarmuka saya menulis, saya ingin memberi nama parameter tipe generik dengan lebih dari satu karakter agar kode lebih mudah dibaca.
Sesuatu seperti....
Map<Key,Value>
Daripada ini ...
Map<K,V>
Tetapi ketika datang ke metode, tipe-parameter terlihat seperti kelas-java yang juga membingungkan.
public void put(Key key, Value value)
Sepertinya Kunci dan Nilai adalah kelas. Saya menemukan atau memikirkan beberapa notasi, tetapi tidak ada yang seperti konvensi dari Sun atau praktik terbaik umum.
Alternatif yang saya tebak atau temukan ...
Map<KEY,VALUE>
Map<TKey,TValue>
java
generics
naming-conventions
pengawal29
sumber
sumber
Jawaban:
Oracle merekomendasikan yang berikut ini di Tutorial Java> Generik> Jenis Generik :
Saya akan tetap menggunakannya untuk menghindari kebingungan di antara para pengembang dan pengelola yang mungkin.
sumber
R
untuk result danA
untuk akumulator.Element
inList<Element>
adalah tipe berparameter atau kelas?BiFunction<T, U, R>
mengikuti konvensi ini. Jika ya, itu akan terjadiBiFunction<T, S, R>
.Menambahkan
Type
Diskusi yang bagus dapat ditemukan di komentar di halaman DZone, Penamaan Konvensi untuk Jenis Parameter .
Lihat komentar oleh Erwin Mueller. Sarannya sangat masuk akal bagi saya: Tambahkan kata
Type
.Sebut apel sebagai apel, mobil itu mobil. Nama yang dimaksud adalah nama dari suatu tipe data, bukan? (Dalam OOP , kelas pada dasarnya mendefinisikan tipe data baru.) Jadi, sebut saja "Jenis".
Contoh Mueller, diambil dari artikel postingan asli:
Menambahkan
T
Sebuah Pertanyaan duplikat memberikan Jawaban ini oleh Andy Thomas. Perhatikan kutipan dari panduan gaya Google yang menyarankan nama tipe multi-karakter harus diakhiri dengan satu huruf besar
T
.sumber
Alasan konvensi penamaan resmi merekomendasikan penggunaan satu huruf adalah sebagai berikut:
Saya pikir dengan IDE modern alasan itu tidak lagi valid sebagai mis. Ide IntelliJ menunjukkan parameter tipe generik dengan warna berbeda dari kelas biasa.
Kode dengan tipe generik seperti yang ditampilkan di IntelliJ Idea 2016.1
Karena perbedaan itu saya menggunakan nama deskriptif yang lebih panjang untuk tipe generik saya, dengan konvensi yang sama seperti tipe biasa. Saya menghindari menambahkan prefiks dan sufiks seperti T atau Type karena saya menganggapnya sebagai noise yang tidak perlu dan tidak lagi diperlukan untuk membedakan tipe generik secara visual.
Catatan: Karena saya bukan pengguna Eclipse atau Netbeans, saya tidak tahu apakah mereka menawarkan fitur serupa.
sumber
Ya, Anda dapat menggunakan nama multi-karakter untuk variabel tipe, asalkan dibedakan dengan jelas dari nama kelas.
Ini berbeda dari konvensi yang disarankan oleh Sun dengan diperkenalkannya obat generik pada tahun 2004. Namun:
Keterbacaan
Keterbacaan itu bagus.
Membandingkan:
untuk:
atau, dengan konvensi multi-karakter Google:
Gaya Google
The Google Java Style Guide memungkinkan kedua nama huruf tunggal dan multi-karakter kelas-seperti nama yang diakhiri dengan T.
Masalah
Nama karakter tunggal bukanlah satu-satunya cara untuk membedakan parameter tipe dari nama kelas, seperti yang telah kita lihat di atas.
Memang benar
@param
elemen JavaDoc dapat memberikan deskripsi yang lebih panjang. Tetapi juga benar bahwa JavaDocs belum tentu terlihat. (Misalnya, ada bantuan konten di Eclipse yang menunjukkan nama parameter tipe.)Banyak konvensi asli Sun diikuti hampir secara universal dalam pemrograman Java.
Namun, konvensi khusus ini tidak.
Pilihan terbaik di antara konvensi yang bersaing adalah masalah opini. Konsekuensi memilih konvensi selain Oracle dalam kasus ini kecil. Anda dan tim Anda dapat memilih konvensi yang paling sesuai dengan kebutuhan Anda.
sumber
Anda dapat menggunakan javadoc untuk setidaknya memberi petunjuk kepada pengguna kelas generik Anda. Saya masih tidak menyukainya (saya setuju dengan @ chaper29) tetapi dokumen membantu.
misalnya,
Hal lain yang pernah saya lakukan adalah menggunakan IDE saya untuk memfaktor ulang kelas yang melanggar konvensi. Kemudian kerjakan kode dan lakukan refaktorisasi kembali ke huruf tunggal. Mempermudah saya juga jika banyak parameter tipe digunakan.
sumber