Saya telah melihat contoh seperti ini:
public class MaxSeconds {
public static final int MAX_SECONDS = 25;
}
dan mengira bahwa saya dapat memiliki kelas Konstanta untuk membungkus konstanta, menyatakan mereka final statis. Saya tahu hampir tidak ada Java sama sekali dan saya bertanya-tanya apakah ini adalah cara terbaik untuk membuat konstanta.
Jawaban:
Itu bisa diterima, bahkan mungkin standar.
di mana
TYPE
tipenya,NAME
adalah nama dalam semua huruf besar dengan garis bawah untuk spasi, danVALUE
merupakan nilai konstan;Saya sangat merekomendasikan TIDAK menempatkan konstanta Anda di kelas atau antarmuka mereka sendiri.
Sebagai catatan: Variabel yang dideklarasikan final dan dapat diubah masih dapat diubah; Namun, variabel tidak pernah bisa menunjuk ke objek yang berbeda.
Sebagai contoh:
Itu legal dan
ORIGIN
kemudian akan menjadi titik di (3, 0).sumber
Saya akan sangat menyarankan agar tidak memiliki kelas konstanta tunggal. Ini mungkin tampak ide yang bagus pada saat itu, tetapi ketika pengembang menolak untuk mendokumentasikan konstanta dan kelas tumbuh untuk mencakup lebih dari 500 konstanta yang semuanya tidak saling terkait satu sama lain (terkait dengan aspek aplikasi yang sama sekali berbeda), ini umumnya berubah menjadi file konstanta yang sepenuhnya tidak dapat dibaca. Sebagai gantinya:
sumber
Ini adalah PRAKTEK BURUK untuk menggunakan antarmuka hanya untuk memegang konstanta (dinamai pola antarmuka konstan oleh Josh Bloch) Inilah yang dinasihati Josh:
Contoh:
Tentang konvensi penamaan:
sumber
abstract
notasi untuk kelas daripada konstruktor pribadi.abstract
alih-alih konstruktor pribadi tidak sepenuhnya mencegah instantiasi, karena orang dapat membuat subkelas dan membuat instance subkelas (bukan bahwa itu ide yang baik untuk melakukannya, tetapi mungkin). @ToolmakerSteve Anda tidak dapat mensubkelas kelas dengan konstruktor pribadi (setidaknya tidak tanpa peretasan yang buruk), karena konstruktor subkelas perlu memanggil konstruktor (sekarang pribadi) dari superclass-nya. Jadi, menandainya tidakfinal
perlu (tapi mungkin lebih eksplisit).Dalam Java Efektif (edisi ke-2), Anda disarankan untuk menggunakan enum daripada int statis untuk konstanta.
Ada langganan enum yang baik di Jawa di sini: http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html
Perhatikan bahwa pada akhir artikel itu pertanyaan yang diajukan adalah:
Dengan jawaban:
sumber
Hindari penggunaan antarmuka:
Itu menggoda, tetapi melanggar enkapsulasi dan mengaburkan perbedaan definisi kelas.
sumber
Saya menggunakan pendekatan berikut:
Daripada, misalnya, saya gunakan
Constants.DB.Connection.URL
untuk mendapatkan konstanta. Itu terlihat lebih "berorientasi objek" bagi saya.sumber
Membuat konstanta akhir statis di kelas terpisah dapat membuat Anda mendapat masalah. Kompiler Java akan benar-benar mengoptimalkan ini dan menempatkan nilai aktual dari konstanta ke dalam kelas yang merujuknya.
Jika nanti Anda mengubah kelas 'Konstanta' dan Anda tidak melakukan kompilasi ulang pada kelas lain yang mereferensikan kelas itu, Anda akan berakhir dengan kombinasi nilai lama dan baru yang digunakan.
Alih-alih menganggapnya sebagai konstanta, anggap sebagai parameter konfigurasi dan buat kelas untuk mengelolanya. Biarkan nilainya menjadi non-final, dan bahkan pertimbangkan untuk menggunakan getter. Di masa mendatang, saat Anda menentukan bahwa beberapa parameter ini sebenarnya harus dapat dikonfigurasi oleh pengguna atau administrator, itu akan jauh lebih mudah dilakukan.
sumber
Kesalahan nomor satu yang dapat Anda buat adalah menciptakan kelas yang dapat diakses secara global yang disebut dengan nama generik, seperti Konstanta. Ini hanya akan dipenuhi dengan sampah dan Anda kehilangan semua kemampuan untuk mencari tahu bagian mana dari sistem Anda yang menggunakan konstanta ini.
Sebagai gantinya, konstanta harus masuk ke kelas yang "memiliki" mereka. Apakah Anda memiliki konstanta yang disebut TIMEOUT? Mungkin harus masuk ke kelas Communications () atau Connection () Anda. MAX_BAD_LOGINS_PER_HOUR? Masuk ke Pengguna (). Dan seterusnya dan seterusnya.
Kemungkinan penggunaan lainnya adalah file Java .properties ketika "konstanta" dapat didefinisikan pada saat run-time, tetapi tidak mudah diubah oleh pengguna. Anda bisa mengemas ini di .jar Anda dan referensi dengan Class resourceLoader.
sumber
Itu cara yang tepat untuk pergi.
Umumnya konstanta tidak disimpan dalam kelas "Konstanta" yang terpisah karena tidak dapat ditemukan. Jika konstanta relevan dengan kelas saat ini, menjaga mereka di sana membantu pengembang berikutnya.
sumber
Bagaimana dengan pencacahan?
sumber
Saya lebih suka menggunakan getter daripada konstanta. Para getter itu mungkin mengembalikan nilai konstan, misalnya
public int getMaxConnections() {return 10;}
, tetapi apa pun yang membutuhkan konstanta akan melalui pengambil.Satu manfaat adalah bahwa jika program Anda melebihi konstanta - Anda merasa perlu untuk dikonfigurasi - Anda bisa mengubah cara pengambil mengembalikan konstanta.
Manfaat lainnya adalah bahwa untuk memodifikasi konstanta Anda tidak perlu mengkompilasi ulang semua yang menggunakannya. Ketika Anda mereferensikan bidang akhir statis, nilai konstanta itu dikompilasi ke dalam bytecode yang merujuknya.
sumber
Saya setuju bahwa menggunakan antarmuka bukanlah cara yang tepat. Menghindari pola ini bahkan memiliki item sendiri (# 18) di Java Efektif Bloch .
Argumen yang dibuat Bloch terhadap pola antarmuka konstan adalah bahwa penggunaan konstanta adalah detail implementasi, tetapi mengimplementasikan antarmuka untuk menggunakannya memperlihatkan bahwa detail implementasi dalam API yang diekspor.
The
public|private static final TYPE NAME = VALUE;
Pola adalah cara yang baik mendeklarasikan sebuah konstanta. Secara pribadi, saya pikir lebih baik menghindari membuat kelas terpisah untuk menampung semua konstanta Anda, tetapi saya belum pernah melihat alasan untuk tidak melakukan ini, selain preferensi dan gaya pribadi.Jika konstanta Anda dapat dimodelkan dengan baik sebagai enumerasi, pertimbangkan struktur enum yang tersedia dalam 1,5 atau lebih baru.
Jika Anda menggunakan versi lebih awal dari 1,5, Anda masih dapat melakukan enumerasi typesafe dengan menggunakan kelas Java normal. (Lihat situs ini untuk lebih lanjut tentang itu).
sumber
Berdasarkan komentar di atas saya pikir ini adalah pendekatan yang baik untuk mengubah kelas konstanta global kuno (memiliki variabel final statis publik) menjadi yang setara dengan enum dengan cara seperti ini:
Jadi saya bisa merujuk mereka seperti:
sumber
Desain berorientasi objek yang baik seharusnya tidak membutuhkan banyak konstanta yang tersedia untuk umum. Sebagian besar konstanta harus dikemas dalam kelas yang membutuhkan mereka untuk melakukan tugasnya.
sumber
Ada sejumlah pendapat untuk menjawab ini. Untuk mulai dengan, konstanta dalam java umumnya dinyatakan publik, statis dan final. Berikut alasannya:
Saya tidak akan pernah menggunakan antarmuka untuk accessor / objek KONSTAN hanya karena antarmuka umumnya diharapkan untuk diimplementasikan. Bukankah ini terlihat lucu:
Sebaliknya saya akan memilih di antara beberapa cara yang berbeda, berdasarkan pada beberapa trade-off kecil, dan itu tergantung pada apa yang Anda butuhkan:
sumber
Satu pendekatan yang harus kita hindari : menggunakan antarmuka untuk mendefinisikan konstanta.
Membuat antarmuka khusus untuk mendeklarasikan konstanta adalah hal terburuk: ia mengalahkan alasan mengapa antarmuka dirancang: mendefinisikan metode kontrak.
Bahkan jika antarmuka sudah ada untuk menjawab kebutuhan tertentu, menyatakan konstanta di dalamnya benar-benar tidak masuk akal karena konstanta tidak boleh menjadi bagian dari API dan kontrak yang disediakan untuk kelas klien.
Untuk menyederhanakan, kami memiliki 4 pendekatan yang luas .
Dengan
static final String/Integer
bidang:Dengan
Java 5 enum
:TLDR: Mana cara terbaik dan di mana menemukan konstanta?
Dalam kebanyakan kasus, cara enum mungkin lebih baik daripada
static final String/Integer
cara dan secara pribadi saya pikirstatic final String/Integer
cara itu harus digunakan hanya jika kita memiliki alasan yang baik untuk tidak menggunakan enum.Dan tentang di mana kita harus mendeklarasikan nilai konstan, idenya adalah untuk mencari apakah ada kelas tunggal yang memiliki kohesi fungsional spesifik dan kuat dengan nilai konstan. Jika kita menemukan kelas seperti itu, kita harus menggunakannya sebagai pemegang konstanta . Kalau tidak, konstanta harus dikaitkan dengan tidak ada satu kelas tertentu.
static final String
/static final Integer
versusenum
Penggunaan Enums benar-benar cara untuk dipertimbangkan dengan kuat.
Enum memiliki keunggulan besar di atas
String
atauInteger
bidang konstan.Mereka menetapkan batasan kompilasi yang lebih kuat. Jika Anda mendefinisikan metode yang menggunakan enum sebagai parameter, Anda hanya bisa memberikan nilai enum yang ditentukan dalam kelas enum (atau nol).
Dengan String dan Integer Anda dapat menggantinya dengan nilai apa pun dari tipe yang kompatibel dan kompilasi akan baik-baik saja meskipun nilainya bukan konstanta yang didefinisikan dalam bidang
static final String
/static final Integer
.Misalnya, di bawah dua konstanta yang didefinisikan dalam kelas sebagai
static final String
bidang:Di sini metode yang mengharapkan memiliki salah satu dari konstanta ini sebagai parameter:
Anda dapat memohonnya dengan cara ini:
atau
Tetapi tidak ada batasan kompilasi yang mencegah Anda dari memohonnya dengan cara ini:
Anda akan memiliki kesalahan hanya pada saat runtime dan hanya jika Anda pada suatu waktu memeriksa nilai yang dikirimkan.
Dengan enum, pemeriksaan tidak diperlukan karena klien hanya bisa memberikan nilai enum dalam parameter enum.
Sebagai contoh, di sini dua nilai didefinisikan dalam kelas enum (sangat konstan di luar kotak):
Di sini metode yang mengharapkan memiliki salah satu dari nilai enum ini sebagai parameter:
Anda dapat memohonnya dengan cara ini:
atau
Tetapi kompilasi tidak akan pernah memungkinkan Anda memohonnya dengan cara ini:
Di mana kita harus mendeklarasikan konstanta?
Jika aplikasi Anda berisi satu kelas yang ada yang memiliki kohesi fungsional spesifik dan kuat dengan nilai konstan, 1) dan 2) tampak lebih intuitif.
Secara umum, ini memudahkan penggunaan konstanta jika ini dideklarasikan di kelas utama yang memanipulasinya atau yang memiliki nama yang sangat alami untuk menebak bahwa kita akan menemukannya di dalam.
Sebagai contoh di perpustakaan JDK, nilai konstanta eksponensial dan pi dideklarasikan dalam kelas yang menyatakan tidak hanya deklarasi konstan (
java.lang.Math
).Klien yang menggunakan fungsi matematika sering bergantung pada
Math
kelas. Jadi, mereka dapat menemukan konstanta dengan cukup mudah dan juga dapat mengingat di manaE
danPI
didefinisikan dengan cara yang sangat alami.Jika aplikasi Anda tidak mengandung kelas yang sudah ada yang memiliki kohesi fungsional yang sangat spesifik dan kuat dengan nilai-nilai konstan, varian 1) dan 2 varian) tampak lebih intuitif.
Secara umum, itu tidak meringankan penggunaan konstanta jika ini dinyatakan dalam satu kelas yang memanipulasi mereka sementara kami juga memiliki 3 atau 4 kelas lain yang memanipulasi mereka sebanyak dan tidak ada satu pun dari kelas-kelas ini tampaknya lebih alami daripada yang lain untuk tuan rumah nilai konstan.
Di sini, mendefinisikan kelas khusus untuk menampung hanya nilai-nilai konstan masuk akal.
Sebagai contoh di perpustakaan JDK,
java.util.concurrent.TimeUnit
enum tidak dideklarasikan dalam kelas tertentu karena tidak ada satu dan hanya satu kelas spesifik JDK yang muncul sebagai yang paling intuitif untuk menahannya:Banyak kelas dinyatakan dalam
java.util.concurrent
penggunaan mereka:BlockingQueue
,ArrayBlockingQueue<E>
,CompletableFuture
,ExecutorService
, ... dan benar-benar tidak ada salah satu dari mereka tampaknya lebih tepat untuk menahan enum.sumber
Konstanta, apa pun jenisnya, dapat dideklarasikan dengan membuat properti yang tidak dapat diubah yang berada dalam suatu kelas (yaitu variabel anggota dengan
final
pengubah). Biasanyastatic
danpublic
pengubah juga disediakan.Ada banyak aplikasi di mana nilai konstanta menunjukkan pemilihan dari n-tuple (misalnya enumerasi ) pilihan. Dalam contoh kami, kami dapat memilih untuk menentukan Jenis yang Dihitung yang akan membatasi nilai yang diberikan yang mungkin (yaitu peningkatan keamanan jenis ):
sumber
Satu kelas konstanta generik adalah ide yang buruk. Konstanta harus dikelompokkan bersama dengan kelas yang paling terkait dengan mereka.
Daripada menggunakan variabel apa pun (terutama enum), saya sarankan Anda menggunakan metode. Buat metode dengan nama yang sama dengan variabel dan minta untuk mengembalikan nilai yang Anda tetapkan ke variabel. Sekarang hapus variabel dan ganti semua referensi dengan panggilan ke metode yang baru saja Anda buat. Jika Anda merasa konstanta cukup umum sehingga Anda tidak perlu membuat instance kelas hanya untuk menggunakannya, maka buat metode konstan metode kelas.
sumber
FWIW, batas waktu dalam nilai detik mungkin harus menjadi pengaturan konfigurasi (dibaca dari file properti atau melalui injeksi seperti di Spring) dan bukan konstanta.
sumber
Apa bedanya
1.
2.
dan menggunakan
MyGlobalConstants.TIMEOUT_IN_SECS
dimanapun kita membutuhkan konstanta ini. Saya pikir keduanya sama.sumber
Saya tidak akan memanggil kelas yang sama (selain dari casing) sebagai konstanta ... Saya akan memiliki minimal satu kelas "Pengaturan", atau "Nilai", atau "Konstanta", di mana semua konstanta akan hidup. Jika saya memiliki sejumlah besar dari mereka, saya akan mengelompokkannya dalam kelas-kelas logis konstan (UserSettings, AppSettings, dll.)
sumber
Untuk mengambil langkah lebih jauh, Anda dapat menempatkan konstanta yang digunakan secara global dalam sebuah antarmuka sehingga mereka dapat digunakan di seluruh sistem. Misalnya
Tapi jangan lakukan itu. Cukup rujuk langsung dalam kode melalui nama kelas yang memenuhi syarat.
sumber
Untuk Konstanta, Enum adalah pilihan IMHO yang lebih baik. Berikut ini sebuah contoh
myClass kelas publik {
sumber
Salah satu cara saya melakukannya adalah dengan membuat kelas 'Global' dengan nilai konstan dan melakukan impor statis di kelas yang membutuhkan akses ke konstanta.
sumber
static final
adalah preferensi saya, saya hanya akan menggunakanenum
jika item itu memang terhitung.sumber
Saya menggunakan
static final
untuk mendeklarasikan konstanta dan pergi dengan notasi penamaan ALL_CAPS. Saya telah melihat beberapa contoh kehidupan nyata di mana semua konstanta disatukan menjadi sebuah antarmuka. Beberapa posting dengan tepat menyebut itu praktik yang buruk, terutama karena bukan untuk apa antarmuka itu. Antarmuka harus menegakkan kontrak dan tidak boleh menjadi tempat untuk meletakkan konstanta yang tidak terkait. Menyatukannya ke dalam kelas yang tidak dapat dipakai (melalui konstruktor pribadi) juga baik-baik saja jika semantik konstan tidak termasuk dalam kelas tertentu ( es). Saya selalu menempatkan konstanta di kelas yang paling berhubungan dengannya, karena itu masuk akal dan juga mudah dipelihara.Enum adalah pilihan yang baik untuk mewakili rentang nilai, tetapi jika Anda menyimpan konstanta mandiri dengan penekanan pada nilai absolut (mis. TIMEOUT = 100 ms), Anda bisa menggunakan
static final
pendekatan tersebut.sumber
Saya setuju dengan apa yang dikatakan kebanyakan orang, yang terbaik adalah menggunakan enum ketika berhadapan dengan kumpulan konstanta. Namun, jika Anda memprogram di Android ada solusi yang lebih baik: IntDef Annotation .
Anotasi IntDef lebih unggul daripada enum dalam satu cara sederhana, ini membutuhkan ruang lebih sedikit karena hanya merupakan penanda waktu kompilasi. Ini bukan kelas, juga tidak memiliki properti konversi string otomatis.
sumber
Merupakan kebiasaan yang BURUK dan sangat MENGUMPULKAN praktik mengutip Joshua Bloch tanpa memahami dasar-dasar fundamentalisme nol.
Saya belum membaca apa pun Joshua Bloch, begitu juga
Seperti dalam fundamentalisme Alkitab, semua hukum Alkitab dapat disimpulkan
dan demikian pula fundamentalisme rekayasa perangkat lunak dapat disimpulkan oleh
Juga, di antara kalangan fundamentalis alkitabiah, sebuah akibat wajar yang kuat dan masuk akal diambil
Demikian pula, jika Anda tidak menghormati diri Anda sebagai seorang programmer dan hanya menerima pernyataan dan ramalan dari beberapa guru pemrograman-TANPA TANPA mempertanyakan dasar-dasar, kutipan dan kepercayaan Anda pada Joshua Bloch (dan sejenisnya) tidak ada artinya. Dan karena itu, Anda benar-benar tidak akan menghargai sesama programer Anda.
Hukum dasar pemrograman perangkat lunak
Konstanta antarmuka-pola adalah kebiasaan buruk ???
Di bawah hukum pemrograman yang efektif dan bertanggung jawab secara fundamental, apa aturan agama ini?
Cukup baca artikel wikipedia tentang konstanta antarmuka-pola ( https://en.wikipedia.org/wiki/Constant_interface ), dan alasan konyol menyatakannya terhadap konstanta antarmuka-pola.
Whatif-No IDE? Siapa di bumi sebagai programmer perangkat lunak tidak akan menggunakan IDE? Sebagian besar dari kita adalah programmer yang lebih suka tidak harus membuktikan memiliki survivalisticism aescetic macho melalui menghindari penggunaan IDE.
Mengotori namespace dengan variabel yang tidak digunakan dalam lingkup saat ini? Bisa jadi penganjur pendapat ini
Menggunakan antarmuka untuk menegakkan konstanta adalah penyalahgunaan antarmuka. Pendukung seperti memiliki kebiasaan buruk
Sulit jika bukan tidak mungkin untuk mengubah antarmuka menjadi kelas yang diimplementasikan di masa depan. Hah .... hmmm ... ???
Apa pun alasannya, TIDAK ADA VALID EXCUSE ketika datang ke FUNDAMENTALLY EFFECTIVE engineering software untuk mendelegitimasi atau umumnya mencegah penggunaan konstanta antarmuka.
Tidak masalah apa maksud asli dan kondisi mental para pendiri bangsa yang menyusun Konstitusi Amerika Serikat. Kita dapat memperdebatkan maksud asli dari para pendiri bangsa tetapi yang saya pedulikan hanyalah pernyataan tertulis dari Konstitusi AS. Dan itu adalah tanggung jawab setiap warga negara AS untuk mengeksploitasi fundamentalisme sastra tertulis, bukan tujuan pendiri tidak tertulis, Konstitusi AS.
Demikian pula, saya tidak peduli apa maksud "asli" dari pendiri platform Java dan bahasa pemrograman untuk antarmuka. Apa yang saya pedulikan adalah fitur efektif yang disediakan oleh spesifikasi Java, dan saya bermaksud untuk mengeksploitasi fitur-fitur itu sepenuhnya untuk membantu saya memenuhi hukum dasar pemrograman perangkat lunak yang bertanggung jawab. Saya tidak peduli jika saya dianggap "melanggar niat untuk antarmuka". Saya tidak peduli apa yang dikatakan Gosling atau seseorang Bloch tentang "cara yang tepat untuk menggunakan Java", kecuali apa yang mereka katakan tidak melanggar kebutuhan saya untuk EFEKTIF dalam memenuhi fundamental.
Fundamental adalah Normalisasi Data-Model
Tidak masalah bagaimana model data Anda dihosting atau dikirimkan. Apakah Anda menggunakan antarmuka atau enum atau apa pun, relasional atau tidak-SQL, jika Anda tidak memahami kebutuhan dan proses normalisasi model-data.
Pertama-tama kita harus mendefinisikan dan menormalkan data-model dari serangkaian proses. Dan ketika kita memiliki model-data yang koheren, HANYA kita dapat menggunakan aliran proses dari komponen-komponennya untuk mendefinisikan perilaku fungsional dan memproses blok suatu bidang atau bidang aplikasi. Dan hanya dengan begitu kita dapat mendefinisikan API dari setiap proses fungsional.
Bahkan aspek normalisasi data seperti yang diusulkan oleh EF Codd sekarang sangat ditantang dan sangat ditantang. misalnya pernyataannya tentang 1NF telah dikritik sebagai ambigu, tidak selaras, dan terlalu disederhanakan, seperti halnya sisa pernyataannya terutama dalam munculnya layanan data modern, repo-teknologi dan transmisi. IMO, pernyataan EF Codd harus sepenuhnya dibuang dan set baru pernyataan yang lebih masuk akal secara matematis dirancang.
Kelemahan mencolok Codd's EF dan penyebab ketidakselarasannya pada pemahaman manusia yang efektif adalah keyakinannya bahwa data multi-dimensi, dimensi-bisa-berubah yang dapat dipahami secara manusiawi dapat dirasakan secara efisien melalui serangkaian pemetaan 2-dimensi yang sepotong-sepotong.
Dasar-dasar Normalisasi Data
Apa yang tidak diungkapkan oleh Codd EF.
Dalam setiap data-model yang koheren, ini adalah urutan bertahap dari keterpaduan data-model yang harus dicapai.
Dalam bidang atau kisi aplikasi-komponen antar-layanan, harus ada satu dan hanya satu model-data yang koheren atau ada sarana untuk model-data / versi untuk mengidentifikasi dirinya sendiri.
Apakah kita masih bertanya apakah kita bisa menggunakan Konstanta Antarmuka? Betulkah ?
Ada masalah normalisasi data yang dipertaruhkan lebih penting daripada pertanyaan biasa ini. JIKA Anda tidak menyelesaikan masalah tersebut, kebingungan yang menurut Anda disebabkan oleh konstanta antarmuka relatif tidak ada. Zilch.
Dari normalisasi data-model maka Anda menentukan komponen sebagai variabel, sebagai properti, sebagai konstanta antarmuka kontrak.
Kemudian Anda menentukan yang masuk ke injeksi nilai, placeholding konfigurasi properti, antarmuka, string akhir, dll.
Jika Anda harus menggunakan alasan untuk mencari komponen yang lebih mudah didiktekan terhadap konstanta antarmuka, itu artinya Anda berada dalam kebiasaan buruk untuk tidak melakukan normalisasi data-model.
Mungkin Anda ingin mengkompilasi model data menjadi rilis vcs. Bahwa Anda bisa mengeluarkan versi data-model yang dapat diidentifikasi dengan jelas.
Nilai yang didefinisikan dalam antarmuka sepenuhnya dijamin tidak dapat diubah. Dan dapat dibagikan. Mengapa memuat serangkaian string terakhir ke kelas Anda dari kelas lain ketika semua yang Anda butuhkan adalah seperangkat konstanta ??
Jadi mengapa tidak mempublikasikan kontrak model data ini? Maksud saya jika Anda dapat mengelola dan menormalkannya secara koheren, mengapa tidak? ...
Sekarang saya bisa mereferensikan label kontrak aplikasi saya dengan cara seperti
Ini membingungkan isi file jar? Sebagai seorang programmer Java saya tidak peduli dengan struktur toples.
Ini menyajikan kompleksitas untuk swap runtime osgi-termotivasi? Osgi adalah cara yang sangat efisien untuk memungkinkan programmer melanjutkan kebiasaan buruknya. Ada alternatif yang lebih baik daripada osgi.
Atau mengapa tidak? Tidak ada kebocoran Konstanta pribadi ke dalam kontrak yang dipublikasikan. Semua konstanta pribadi harus dikelompokkan ke dalam antarmuka pribadi bernama "Konstanta", karena saya tidak ingin harus mencari konstanta dan saya terlalu malas untuk berulang kali mengetik "private final String".
Bahkan mungkin ini:
Satu-satunya masalah dengan konstanta antarmuka yang patut dipertimbangkan adalah ketika antarmuka diimplementasikan.
Ini bukan "niat asli" dari antarmuka? Seperti saya akan peduli tentang "niat asli" dari para pendiri pendiri dalam menyusun Konstitusi AS, daripada bagaimana Mahkamah Agung akan menafsirkan surat-surat tertulis dari Konstitusi AS ???
Lagi pula, saya tinggal di tanah yang bebas, liar dan rumah yang berani. Berani, bebas, jadilah liar - gunakan antarmuka. Jika sesama programmer saya menolak menggunakan cara pemrograman yang efisien dan malas, apakah saya diwajibkan oleh aturan emas untuk mengurangi efisiensi pemrograman saya agar selaras dengan mereka? Mungkin saya harus, tetapi itu bukan situasi yang ideal.
sumber