Covariant Return Types
Şub 6th, 2010 | Yazar: Özcan Acar | Kategori: Püf NoktasıJava 1.5 ile kullanıma sunulan ve covariant return type ismini taşıyan bir yapı mevcuttur. Java 1.5 öncesi bir alt sınıf, bir üst sınıfın sahip olduğu metodu yeniden implemente etmek (method overriding) istediginde, bu metodun geri döndürdüğü veri tipinin, üst sınıftaki metot ile aynı olması gerekmekteydi. Bunun bir örneği aşağıda yer almaktadır.
package test.controller;
import java.util.Map;
import test.criteria.Criteria;
public abstract class AbstractController implements Controller
{
public void executeFilter()
{
Map<String, String> map = createCriteria().getCriteriaMap();
}
public abstract Criteria createCriteria();
}
Soyut (abstract) olan AbstractController sınıfı bünyesinde, alt sınıflarda implemente edilmek üzere createCriteria() isminde bir metot tanımlıyoruz. AccountTableController sınıfı bu metodu implemente etmektedir.
package test.controller;
import java.util.HashMap;
import java.util.Map;
import test.criteria.MyCriteria;
import test.model.Konto;
public class AccountTableController extends AbstractController
{
private Account model = new Account();
public Criteria createCriteria()
{
Map<String, String> map = new HashMap<String, String>();
map.put("kontonr", model.getKontonr());
map.put("blz", model.getBlz());
return new Criteria(map);
}
}
Görüldüğü gibi AccountTableController.createCriteria() metodu Criteria tipinde bir degeri geri döndürmektedir. Bu metodun geri döndürdüğü değerin Java 1.5 öncesi Criteria tipinde olması gerekmektedir, çünkü üst sınıfta tanımlanmış olan bu metodun, üst sınıf bünyesinde geri döndürdüğü değer Criteria tipindedir.
Java 1.5 ile bu durum değişmiştir. Üst sınıfta yer alan bir metot alt sınıfta tekrar reimplement edilirse (method overriding), reimplemente edilen metodun geri döndürdüğü değerin tipi, üst sınıftaki metodun geri döndürdüğü sınıfın bir alt sınıfı olabilir. Bunun bir örneği aşağıda yer almaktadır.
package test.controller;
import java.util.HashMap;
import java.util.Map;
import test.criteria.MyCriteria;
import test.model.Konto;
public class AccountTableController extends AbstractController
{
private Account model = new Account();
@Override
public MyCriteria createCriteria()
{
Map<String, String> map = new HashMap<String, String>();
map.put("kontonr", model.getKontonr());
map.put("blz", model.getBlz());
return new MyCriteria(map);
}
}
MyCriteria, Criteria sınıfının bir alt sınıfıdır ve AccountTableController sınıfı implemente ettiği createCriteria() metodunun MyCriteria tipinde bir değeri geri döndürmesi sağlamıştır. Bu şekilde cast işlemi yapılmadan alt sınıfların daha zengin tipte verileri geri döndürebilmeleri amaçlanmaktadır.
EOF ( End Of Fun)
Özcan Acar
Püf Noktası kategorisinden son yazılar
- IDL Compiler - May 9th, 2011
- Subclipse Şifresi - April 28th, 2011
- Maven2 ve OutOfMemory - October 26th, 2010
- Kim Daha İyi Programcı? - October 23rd, 2010
- Java Compiler Versiyonu - May 26th, 2010
- Java'da Finalizer Metodu - February 23rd, 2010
- Java'da Final Anahtar Kelimesi - February 18th, 2010
- Java Enum ile Singleton Tasarım Şablonu - February 2nd, 2010
- DBUnit JUnit Entegrasyonu - January 15th, 2010
- HSQLDB ve JUnit Entegrasyonu - January 15th, 2010




Henüz yorum yapılmamış.