Güncelleme: Aşağıdaki orijinal cevap, soruyu tam olarak anlamadan yazılmıştır ve bu nedenle doğrudan soruyu ele almaz. :)
Bununla birlikte, final
anahtar kelimenin genel kullanımını anlamak isteyenler için bilgilendirici olmalıdır .
Soruya gelince, kendi yorumumu aşağıdan alıntılamak istiyorum.
Kendi uygulamanızda nihai olup olmayacağına karar vermek için sizi özgür bırakacak bir argümanın sonunu uygulamak zorunda olmadığınıza inanıyorum .
Ama evet, final
arayüzde ilan edebilmeniz oldukça garip geliyor , ancak uygulamada nihai değil . Aşağıdakilerden biri olursa daha mantıklı olurdu:
a. final
interface (abstract) yöntemi bağımsız değişkenleri için anahtar kelimeye izin verilmedi (ancak bunu uygulamada kullanabilirsiniz) veya
b. final
arayüzde olduğu gibi bir argüman beyan etmek, onu final
uygulamada beyan edilmeye zorlar (ancak final dışı olanlar için zorlanmaz).
Bir yöntem imzasının final
parametrelere sahip olmasının iki nedenini düşünebilirim : Fasulye ve Nesneler ( Aslında ikisi de aynı nedendir, ancak biraz farklı bağlamlardır. )
Nesneler:
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 ");
}
final
Anahtar kelime kazara yeni yaratmayacağı sağlanmalıdır yerel bunu yapmaya çalışırken bir derleme hatası göstererek tencereyi. Bu, tavuk suyunun, addChicken
yöntemin sahip olduğu orijinal tenceremize eklenmesini sağladı . Bunu addVegetables
karnabaharı kaybettiğimiz yerle karşılaştırın, çünkü bunu orijinal tencerenin yerine yeni bir yerel tencereye ekledi .
Fasulye:
Nesnelerle aynı kavramdır (yukarıda gösterildiği gibi) . Fasulye esas Object
olarak Java'dadır. Bununla birlikte, fasulye (JavaBeans), çeşitli uygulamalarda, tanımlanmış bir ilgili veri koleksiyonunu depolamak ve dolaşmak için uygun bir yol olarak kullanılır. Nasıl addVegetables
yeni bir pişirme kabı oluşturarak StringBuilder
ve karnabahar ile fırlatarak pişirme işlemini bozabilir gibi, JavaBean bir pişirme kabı ile de aynısını yapabilir .
final
kopyalandığından, yerel türlerle hiçbir şey yapmaz.