Perhatikan bahwa IDEA memiliki inspeksi ini untuk Java juga, itu disebut Metode mungkin 'statis' ,
Inspeksi ini melaporkan setiap metode yang mungkin dibuat statis. Suatu metode mungkin statis jika tidak mereferensikan salah satu metode non-statis kelasnya dan bidang non-statis dan tidak diganti dalam subkelas ...
Masalahnya adalah bahwa untuk kode Java, inspeksi ini dimatikan secara default (programmer dapat menyalakannya atas kebijakan mereka). Alasan untuk hal ini kemungkinan besar bahwa validitas / kegunaan inspeksi semacam itu dapat ditentang, berdasarkan beberapa sumber yang cukup otoritatif.
Untuk memulainya, tutorial resmi Java agak membatasi kapan metode harus statis:
Penggunaan umum untuk metode statis adalah untuk mengakses bidang statis.
Diberikan di atas, orang dapat berargumen bahwa menyalakan secara default pemeriksaan yang disebutkan tidak sesuai dengan penggunaan pengubah statis yang disarankan di Jawa.
Selain itu, ada beberapa sumber lain yang sejauh menyarankan pendekatan yang bijaksana dalam menggunakan ide-ide yang ada di balik inspeksi ini atau bahkan mengecilkannya.
Lihat misalnya artikel Java World - Tn. Happy Object mengajarkan metode statis :
Metode apa pun yang independen dari keadaan instance adalah kandidat untuk dinyatakan sebagai statis.
Perhatikan bahwa saya mengatakan "kandidat untuk dinyatakan statis." Bahkan dalam contoh sebelumnya tidak ada yang memaksa Anda untuk menyatakan instances()
sebagai statis. Mendeklarasikannya sebagai statis hanya membuatnya lebih mudah untuk memanggil karena Anda tidak perlu instance untuk memanggil metode. Terkadang Anda akan memiliki metode yang tampaknya tidak bergantung pada keadaan instance. Anda mungkin tidak ingin menjadikan metode ini statis. Bahkan Anda mungkin hanya ingin menyatakannya sebagai statis jika Anda perlu mengaksesnya tanpa instance.
Selain itu, meskipun Anda dapat mendeklarasikan metode seperti itu sebagai statis, Anda mungkin tidak ingin karena masalah warisan yang disisipkan ke dalam desain Anda. Lihatlah "Desain Berorientasi Objek Efektif" untuk melihat beberapa masalah yang akan Anda hadapi ...
Sebuah artikel di blog pengujian Google bahkan menyatakan bahwa Metode Statis adalah Kematian untuk Testabilitas :
Mari kita lakukan latihan mental. Misalkan aplikasi Anda tidak memiliki apa pun kecuali metode statis. (Ya, kode seperti itu adalah mungkin untuk ditulis, itu disebut pemrograman prosedural.) Sekarang bayangkan grafik panggilan dari aplikasi itu. Jika Anda mencoba untuk mengeksekusi metode daun, Anda tidak akan memiliki masalah pengaturan negaranya, dan menyatakan semua kasus sudut. Alasannya adalah bahwa metode daun tidak membuat panggilan lebih lanjut. Saat Anda bergerak semakin jauh dari daun dan semakin dekat ke main()
metode root , akan semakin sulit untuk mengatur keadaan dalam tes Anda dan lebih sulit untuk menegaskan hal-hal. Banyak hal akan menjadi mustahil untuk ditegaskan. Tes Anda akan semakin besar. Setelah Anda mencapaimain()
metode Anda tidak lagi memiliki tes unit (karena unit Anda adalah seluruh aplikasi) Anda sekarang memiliki tes skenario. Bayangkan aplikasi yang Anda coba uji adalah pengolah kata. Tidak banyak yang bisa Anda tegaskan dari metode utama ...
Terkadang metode statis adalah pabrik untuk objek lain. Ini lebih lanjut menjelaskan masalah pengujian. Dalam pengujian kami mengandalkan fakta bahwa kami dapat mentransfer objek secara berbeda menggantikan dependensi penting dengan ejekan. Setelah new
operator dipanggil, kami tidak dapat mengganti metode dengan sub-kelas. Penelepon dari pabrik statis semacam itu secara permanen terikat pada kelas beton yang diproduksi oleh metode pabrik statis. Dengan kata lain kerusakan metode statis jauh melampaui metode statis itu sendiri. Memotong-motong kabel grafik objek dan kode konstruksi menjadi metode statis sangat buruk, karena kabel grafik objek adalah cara kami mengisolasi sesuatu untuk pengujian ...
Anda lihat, mengingat di atas tampak wajar bahwa inspeksi yang disebutkan dimatikan secara default untuk Java.
Pengembang IDE akan memiliki benar-benar kesulitan menjelaskan mengapa mereka pikir itu sangat penting untuk mengaturnya secara default, terhadap rekomendasi diakui secara luas dan praktik terbaik.
Bagi Groovy, segalanya sangat berbeda. Tak satu pun dari argumen yang tercantum di atas berlaku, terutama yang tentang testability, seperti yang dijelaskan misalnya dalam Mocking Static Methods dalam artikel Groovy di Javalobby:
Jika kelas Groovy yang Anda uji membuat panggilan metode statis di kelas Groovy lain, maka Anda dapat menggunakan ExpandoMetaClass yang memungkinkan Anda menambahkan metode, konstruktor, properti, dan metode statis secara dinamis ...
Perbedaan ini kemungkinan mengapa pengaturan default untuk inspeksi yang disebutkan berlawanan di Groovy. Sementara di Java default "on" akan menjadi sumber kebingungan pengguna, di Groovy, pengaturan yang berlawanan bisa membingungkan pengguna IDE.
"Hei metode ini tidak menggunakan bidang contoh, mengapa kamu tidak memperingatkanku tentang hal itu?" Pertanyaan itu akan mudah dijawab untuk Jawa (seperti dijelaskan di atas), tetapi untuk Groovy, tidak ada penjelasan yang meyakinkan.