Halihazırda birkaç ön hesaplamalar yapan ancak yöntemin geri dönmesi beklenen son sonucu sağlayamayan soyut bir sınıfta bir String foo()
yöntemim var. Yani istediğim, soyut sınıfımdan soyut olmayan her bir sınıfın, ilk super()
çağrıldığı ve sonuç hesaplandığı şekilde foo
'u uygulamak zorunda olmasıdır. Bunu java'da zorlamak için bir yol var mı?Geçersiz kılınmak için soyut olmayan yöntem kuvveti
cevap
Evet, soyut yöntem template method pattern kullanmak yeniden tasarlayarak ve dahil ederek: Eğer bir yöntemi geçersiz kılmak için alt sınıfları zorlamak istiyorsanız Temelde
public abstract class AbstractSuper {
public final String foo() {
// Maybe do something before calling bar...
String initialResult = bar();
// Do something common, e.g. validation
return initialResult;
}
protected abstract String bar();
}
, bu soyut olmak zorunda yapar - ama bu Biliyoruz ki Diğer kod tarafından çağrılan yöntem olması gerekir ...
iki yöntem çağırmak için nasıl bir kongre var mı ihtiyacı olduğunu gerçekleştirmek için ya ihtiyacı soyut bir yöntemi çağırmak mı foo –
@ principal-ideal-domain Onlar? 'Soyut' yöntemi, tüm hesaplamanın farklı bir bölümünü gerçekleştirir, dolayısıyla bir isme göre olmalıdır. Aynı isim, bir çocuk dersinde soyut yöntemin nasıl uygulanacağı konusunda bazı yanlış anlaşılmalara neden olabilir. – Tom
@Tom Evet, bu doğru. Farklı bir parça yapar. Ama genellikle yöntemimi, yaptıklarıyla değil, geri döndükleriyle ararım. Örneğin şu anki durumumda sadece yöntem çağrılarının sayısını saymak istiyorum, bu yüzden foo'm sayacı ++ gibi görünüyor; dönüş çubuğu(); '. Bu arada: Soyut yöntemin çağrısını, onu uygulayan sınıflarda yasaklamak mümkün mü? –
Bunu Java'da yapmanın bir yolu yok. Ancak, soyut olan ve onu çağıran bir başka yöntemi de ilan edebilirsiniz. Şunun gibi:
public final String foo() {
String intermediate = ... // calculate intermediate result;
return calculateFinalResult(intermediate);
}
protected abstract String calculateFinalResult(String intermediate);
Eğer calculateFinalResult
geçersiz zorunda kalacak Bu şekilde. super
örneğinin çağrılması gerekli değildir. Ayrıca alt sınıflar, foo()
'nu final
olarak bildirildiği gibi yeniden tanımlayamaz.
Sadece bir not: Değiştiricilerin uygun bir sıralamasını kullanmak (örneğin, "korumalı" ve "soyut") iyi bir fikirdir. Burada önerilen bir sıralama bulabilirsiniz: https://google-styleguide.googlecode.com/svn/trunk/javaguide.html#s4.8.7-modifiers. – Tom
Böyle bir şey mi var?
public abstract class MyBean {
public final String foo(){
String preFinalResult = [...];
return doFinalResult(preFinalResult)
}
protected abstract String doFinalResult(String preFinal);
}
"DoFinalResult" ifadesinin değiştiricisini "public" konumundan "protected" olarak değiştirmek iyi bir fikir olabilir, bu nedenle diğer sınıflar (aynı sınıftaki alt sınıflar ve sınıflar hariç) doğrudan erişemez. – Tom
- 1. Anonim bir sınıf, soyut sınıfın soyut olmayan yöntemini uygulayabilir mi?
- 2. overiding soyut yöntem fare olayları
- 3. Soyut bir yöntem nasıl dinlenir?
- 4. Java olmadan çipte soyut yöntem türleri için farklı dönüş türleri
- 5. Bağımsız değişkenler listesi ile soyut yöntem
- 6. bir soyut yöntem java bir arabirimde
- 7. Matter.js hesaplama kuvveti gerekli
- 8. "Soyut geçersiz kılma" neden subtraitda "geçersiz kılma" gerektirmiyor?
- 9. Geçersiz bir yöntem çağırma
- 10. Özellikler ve soyut yöntemler Scala'da geçersiz kılma
- 11. Java'da geçersiz uzaktan yöntem
- 12. Statik olmayan yöntem PropertyInfo.SetValue
- 13. Boş olmayan bağımsız değişkenler için yöntem başvuruları?
- 14. Soyut yöntem hatası uygulamalıdır, ancak var
- 15. jenerik arabirimler için soyut başvurular
- 16. Easymock kullanarak, tekrarlanan geçersiz yöntem çağrısı
- 17. Angularjs formunda doğrulama kuvveti denetleniyor
- 18. Sınıf soyut değil ve soyut yöntemi geçersiz kılmıyor OnClick (Görünüm) 'te OnClickListener
- 19. Soyut sınıf için referans
- 20. C++ Kalıtım: Geçersiz kılındığında sanal yöntem çağırma
- 21. Uygulamayı çalıştırdığım zaman kuvveti kapatın.
- 22. Eğer sihirli bir yöntem geçersiz kılabilir miyim?
- 23. Java Generics isim çatışması, yöntem doğru şekilde geçersiz kılındı
- 24. C# 'de soyut ve geçersiz kılan sabitler nasıl bulunur?
- 25. Eşit olmayan bir çift karşılaştırma için GoogleTest'te kullanışlı yöntem?
- 26. Statik olmayan bir yöntem için bir hedef C gerektirir. #
- 27. ExtJS'de sınıfları/özellikleri geçersiz kılmak için en iyi yöntem?
- 28. HATA Statik yöntem null örneği gerektirir, statik olmayan yöntem null olmayan örnek gerektirir
- 29. Mockito, kontrol edilen istisna ile geçersiz yöntem
- 30. Dotnet'te yavaş/etkin olmayan yöntem çağrıları bul
nihai hesaplamalar veya dönüş değer (ler) bu –
metodunun imzasıyla paylaşmak lütfen? Onlara aynı ismi verdim (ki bu elbette ki mümkün değil) çünkü temelde aynı şeyi yapıyorlar. – MadProgrammer