Solusi metode statis antarmuka Java?

Kami memiliki antarmuka REST tertentu:

POST /calculation
<data>abc</data>

Perhitungan ini dapat dilaksanakan oleh "kalkulator" logis yang berbeda tergantung pada konfigurasi server.

Kami sekarang merancang antarmuka Java yang harus diimplementasikan oleh setiap kalkulator. Antarmuka akan memiliki metode untuk setiap layanan REST.

Mengingat semua panggilan REST (dan HTTP) tidak memiliki kewarganegaraan, setiap metode harus bersifat statis. Namun Anda tidak dapat mendefinisikan metode statis di antarmuka Java. Apakah ada solusi yang baik untuk situasi ini?

Kita dapat mendefinisikan metode sebagai non-statis dan kemudian membuat instance kelas kalkulator terlebih dahulu. Tampaknya lebih bersih untuk menunjukkan bahwa metode tersebut tidak memiliki kewarganegaraan dengan menggunakan kata kunci static di antarmuka.


person Marcus Leon    schedule 12.11.2009    source sumber


Jawaban (4)


Tampaknya bagi saya Anda menginginkan antarmuka dengan metode yang dinyatakan seperti biasa, dan kelas implementasi, dan kemudian membuat instance tunggal dari ini. Tidak ada alasan per se untuk metode itu sendiri menjadi statis.

person Brian Agnew    schedule 12.11.2009

Tanpa kewarganegaraan tidak berarti statis. Stateless berarti komponen tersebut tidak bergantung pada negara. Saya katakan komponen, karena seluruh implementasi antarmuka Anda sebenarnya tidak memiliki kewarganegaraan - tidak akan memiliki variabel anggota apa pun. Jadi beberapa contoh kelas implementasi baik-baik saja. Terutama jika Anda memiliki konteks untuk mengelolanya - Spring atau EJB misalnya.

person Bozho    schedule 12.11.2009

Menurut Anda mengapa metode harus bersifat statis? Tentu saja bisa, tapi itu akan membatasi Anda dalam hal memasukkan implementasi yang berbeda nanti. Jika Anda khawatir tentang konsumsi memori atau sejenisnya, menggunakan Singleton akan melakukan hal yang sama seperti statis untuk Anda, seperti yang telah Anda katakan di paragraf terakhir pertanyaan Anda.

person Daniel Schneller    schedule 12.11.2009

Jika tidak ada kelas yang mengimplementasikan antarmuka ini yang perlu mengubah implementasinya, gunakan static method di antarmuka sebagai metode helper.

Anda tidak memerlukan solusi apa pun dengan versi java 8.

Java 8 mendukung metode statis di antarmuka. Lihat halaman dokumentasi ini.

Metode Statis:

Selain metode default, Anda dapat menentukan metode statis di antarmuka. (Metode statis adalah metode yang diasosiasikan dengan kelas yang mendefinisikannya dan bukan dengan objek apa pun. Setiap instance kelas berbagi metode statisnya.)

Hal ini memudahkan Anda mengatur metode pembantu di perpustakaan Anda; Anda dapat menyimpan static methods khusus untuk interface di interface yang sama daripada di separate class

Solusi lain untuk masalah Anda adalah menggunakan Singleton seperti yang disarankan dalam jawaban yang diterima.

person Ravindra babu    schedule 18.02.2016