Pembaruan: Jawaban asli di bawah ditulis tanpa sepenuhnya memahami pertanyaan, dan karena itu tidak secara langsung menjawab pertanyaan tersebut. :)
Namun, itu harus informatif bagi mereka yang ingin memahami penggunaan final
kata kunci secara umum .
Adapun pertanyaannya, saya ingin mengutip komentar saya sendiri dari bawah.
Saya percaya Anda tidak dipaksa untuk mengimplementasikan finalitas argumen agar Anda bebas memutuskan apakah itu final atau tidak dalam implementasi Anda sendiri.
Tapi ya, kedengarannya agak aneh bahwa Anda dapat mendeklarasikannya final
di antarmuka, tetapi memilikinya non-final dalam implementasi. Akan lebih masuk akal jika:
Sebuah. final
kata kunci tidak diizinkan untuk argumen metode antarmuka (abstrak) (tetapi Anda dapat menggunakannya dalam implementasi), atau
b. mendeklarasikan argumen seperti final
pada antarmuka akan memaksanya dinyatakan final
dalam implementasi (tetapi tidak dipaksakan untuk non-final).
Saya dapat memikirkan dua alasan mengapa metode tanda tangan dapat memiliki final
parameter: Kacang dan Objek ( Sebenarnya, keduanya adalah alasan yang sama, tetapi konteks yang sedikit berbeda. )
Benda:
public static void main(String[] args) {
StringBuilder cookingPot = new StringBuilder("Water ");
addVegetables(cookingPot);
addChicken(cookingPot);
System.out.println(cookingPot.toString());
// ^--- OUTPUT IS: Water Carrot Broccoli Chicken ChickenBroth
// We forgot to add cauliflower. It went into the wrong pot.
}
private static void addVegetables(StringBuilder cookingPot) {
cookingPot.append("Carrot ");
cookingPot.append("Broccoli ");
cookingPot = new StringBuilder(cookingPot.toString());
// ^--- Assignment allowed...
cookingPot.append("Cauliflower ");
}
private static void addChicken(final StringBuilder cookingPot) {
cookingPot.append("Chicken ");
//cookingPot = new StringBuilder(cookingPot.toString());
// ^---- COMPILATION ERROR! It is final.
cookingPot.append("ChickenBroth ");
}
Kata final
kunci memastikan bahwa kami tidak akan secara tidak sengaja membuat panci memasak lokal baru dengan menunjukkan kesalahan kompilasi ketika kami berusaha melakukannya. Ini memastikan kaldu ayam ditambahkan ke panci masak asli kami yang addChicken
metodenya didapat. Bandingkan ini dengan addVegetables
tempat kami kehilangan kembang kol karena menambahkan bahwa ke panci memasak lokal baru, bukan pot asli yang didapat.
Kacang:
Ini adalah konsep yang sama dengan objek (seperti yang ditunjukkan di atas) . Kacang pada dasarnya ada Object
di Jawa. Namun, kacang (JavaBeans) digunakan dalam berbagai aplikasi sebagai cara mudah untuk menyimpan dan menyebarkan koleksi data terkait yang telah ditentukan. Sama seperti yang addVegetables
bisa mengacaukan proses memasak dengan membuat panci memasak baru StringBuilder
dan membuangnya bersama kembang kol, itu juga bisa melakukan hal yang sama dengan panci memasak JavaBean .
final
tidak melakukan apa pun dengan tipe asli, karena mereka disalin