Merhaba,

Şöyle bir Java kodu okudum ve daha sonraki kullanım yerini göremediğimden şaşırdım. Emin olamadığım için sorayım dedim.

public ArrayList<Oyuncak> bebekler =new ArrayList<Oyuncak>();
public ArrayList<Oyuncak> misketler=new ArrayList<Oyuncak>();

Bu misketler ve bebekler, içinde Oyuncak türünde nesneleri barındıran birer liste. bebekler isimli olan listede Oyuncak sınıfından türeme çeşit çeşit bebek oyuncakları tutan nesneleri barındırıyoruz. Aynı şekilde misketler isimli olan listede de donga, beşlik, onluk gibi çeşitli misketleri saklıyoruz. (Burada bir yanlışlık var mı?)

Şimdi bir de böyle bir metot var. Bu metodun neden olduğunu anlayamadım.

public ArrayList<Oyuncak> getBebekler() {
    return bebekler;
}

public ArrayList<Oyuncak> getMisketler() {
    return misketler;
}
  • Ben bu son iki metodu niçin kullanırım?
  • Bunlar bana misketler veya bebekler listesini içindeki Oyuncak türevi nesnelerin hepsini/tümden mi döndürüyor?
  • () kullanım nedeni nedir? Doğrudan ArrayList<oyuncak> olarak belirtmek ile arada fark var mıdır?
  • Bu konuyla Java Generics konusuna nasıl bakmalıyım?

soruldu: 01 Eyl '12, 08:41

murtaza's gravatar image

murtaza
981122535
cevap kabul oranı: 29%

değiştirildi: 01 Eyl '12, 08:43


Sorunu anladığım kadarıyla yanıt vermeye çalışıyorum. İlk verdiğin kod parçasında kullanım şekline göre OOP mantığına ters düşüyor olabilir. (Fakat erişim belirteci public olarak bırakılmamalı.(data encapsulation)) Eğer bebekler ile misketler aynı veri değişkenleri ve fonksiyonlarını kullanacaksa Oyuncak tipinde olması mantıklı fakat ortak noktaları olacak extra özellik de içerecekse kalıtım yoluna gidilmeli. Oyuncak extend edilip Misket sınıfı oluşturmak gibi.

Son metodlar bildiğin getter metodları. Bu kodların bulunduğu sınıftan yeni bir intance oluşturulduğunda dışarıdan erişebilirsin.

A a = new A();
a.getBebekler(); 
a.bebekler();

İkiside aynı sonucu döndürecek.

()'den bahsetmişsin. ArrayList sınıf sonuçta paremetreli veya paremetresiz kurucu fonksyionları olabilir. Parantezler olmadan syntax hatası vermeli.

bebekler.add(bebek1);
bebekler.add(bebek2);
bebekler.add(bebek3);
bebekler.add(misket1);
getBebekler();

Bana sadece 4 nesne yüklenmiş olan bir ArrayList döndürecek. Yani List'e ne koyduysan onları.

permanent link

cevaplandı: 01 Eyl '12, 10:10

Tunahan%20Pehlivan's gravatar image

Tunahan Pehlivan
2.5k61740
cevap kabul oranı: 15%

değiştirildi: 01 Eyl '12, 10:12

Hmm. Yine bir ArrayList döndürecek... O zaman aslında bu kodun başında java.util.arraylist gibi bir ibare bulundursam sözünü ettiğiniz .add() metoduyla listelerime verdiğiniz örnek gibi nesne ekleyebiliyorum. Bunu hiç düşünmemiştim.

(Sonra da bu listeyi döngüye (for gibi) sokup, içine eklediğim nesneleri doğrudan veya istediğim özelliklerini kullanarak işleme sokabilirim.)

Benim kafamı karıştıran şimdi bu "getBebekler()" birbirinden farklı ve Oyuncak sınıfından türetilmiş bebek nesnelerini ArrayList olarak verecek ya, peki o zaman niçin ArrayList<oyuncak> gibi bir ifade-kısıt var?

(01 Eyl '12, 10:32) murtaza murtaza's gravatar image

Parantez konusunda kafa hâlâ karışık. Misal, ArrayList değil de String nesnesi olsaydı:

"String isim=new String;" ile "String isim=new String();" arasındaki fark nedir? Bunu ayrı bir soru olarak sormam daha doğru olur derseniz, sorayım.

(01 Eyl '12, 10:40) murtaza murtaza's gravatar image

Peki getBebekler().get(0) bu ne döndürecek? <> arasına bir şey belirtmediğinde sanırım Object tipinde alıyor.

C++ da bu farketmiyor. İki kullanımla da aynı sonucu alıyordun yanlış hatırlamıyorsam. Fakat java da parentezsiz haline syntax hatası alıyorsun. Yani ben bunda bir sebep aramadım açıkcası çünkü bu bir kural. Eğer () böyle tanımlarsan paremetresiz (arg0, arg1) bu şekilde iki paremetreli kurucu fonksiyonu çalışır. Bunu bilmen yeterli bence.

(01 Eyl '12, 16:06) Tunahan Pehlivan Tunahan%20Pehlivan's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,079
×10
×3
×3

Soruldu: 01 Eyl '12, 08:41

Görüntüleme: 1,135 kez

Son güncelleme: 01 Eyl '12, 16:06

powered by BitNami OSQA