Özet - Generic Container
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 58 / 87.
Görev
KolayGenericler hakkında öğrendiğiniz her şeyi bir araya getiren çok yönlü bir depolama sistemi inşa edelim! Herhangi bir türdeki öğeleri depolayabilen, alabilen ve işleyebilen bir Container sınıfı ile birlikte joker karakterlerin (wildcards) kullanımını gösteren yardımcı metotlar oluşturacaksınız.
Kodunuzu üç dosya halinde düzenleyeceksiniz:
Container.java: Bir öğe koleksiyonunu yöneten genel birContainer<T>sınıfı oluşturun. Konteynırınız, öğeleri depolamak için dahili olarak birArrayList<T>kullanmalıdır. Bir öğe eklemek içinadd(T item), belirli bir konumdaki öğeyi almak içinget(int index), öğe sayısını döndürmek içinsize()ve konteynırın boş olup olmadığını kontrol etmek içinisEmpty()metotlarını ekleyin. Ayrıca dahili listeyi döndüren birgetAll()metodu ekleyin.ContainerUtils.java: Konteynırlarınızla çalışan statik generic metotlara sahip bir yardımcı sınıf oluşturun:printAll(Container<?> container)- Herhangi bir konteynırdaki tüm öğeleri her satıra bir tane gelecek şekilde yazdırmak için sınırsız bir joker karakter (unbounded wildcard) kullanır.countItems(Container<? extends Number> container)- Konteynırdaki tüm sayısal değerlerin toplamını hesaplamak için üstten sınırlı bir joker karakter (upper bounded wildcard) kullanır ve sonucudoubleolarak döndürür.addDefaults(Container<? super Integer> container)- Tam sayı tutabilen herhangi bir konteynıra 1, 2 ve 3 tam sayılarını eklemek için alttan sınırlı bir joker karakter (lower bounded wildcard) kullanır.<T> T getLastOrDefault(Container<T> container, T defaultValue)- Konteynırdaki son öğeyi veya konteynır boşsa varsayılan değeri döndüren generic bir metot.Main.java: Generic konteynır sisteminizi bir araya getirin! Üç girdi alacaksınız: bir kelime (String), bir tam sayı ve bir ondalıklı sayı (double).İlk olarak, bir
Container<String>oluşturun ve kelimeyi ona iki kez ekleyin.String container:yazdırın, ardından içeriğini görüntülemek içinprintAllmetodunu kullanın.Ardından, bir
Container<Double>oluşturun ve ondalıklı sayı değerini ona ekleyin. Boş bir satır yazdırın, ardındancountItemskullanarakNumber sum: [sum]yazdırın.Daha sonra bir
Container<Number>oluşturun ve üzerindeaddDefaultsmetodunu çağırın. Boş bir satır yazdırın, ardındanAfter adding defaults:yazdırın ve içeriği göstermek içinprintAllkullanın.Son olarak, boş bir
Container<Integer>oluşturun ve girdi olarak aldığınız tam sayıyı varsayılan değer olarak kullanarakgetLastOrDefaultmetodunu çağırın. Boş bir satır yazdırın, ardındanLast or default: [result]yazdırın.
Sırasıyla üç girdi alacaksınız: bir kelime (String), bir tam sayı ve bir ondalıklı sayı (double).
Bu zorluk; generic sınıfları, generic metotları, sınırlı tür parametrelerini ve her üç joker karakter türünü birleştirir. Her parçanın nasıl farklı bir amaca hizmet ettiğine dikkat edin: generic sınıf tür güvenli depolama sağlar, sınırlı joker karakterler esnek okuma ve yazma imkanı tanır ve generic metotlar farklı konteynır türleri arasında yeniden kullanılabilir işlemler sunar!
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Girdileri oku
String word = scanner.nextLine();
int intValue = Integer.parseInt(scanner.nextLine());
double doubleValue = Double.parseDouble(scanner.nextLine());
// TODO: Bir Container<String> oluşturun ve kelimeyi iki kez ekleyin
// "String container:" yazdırın, ardından ContainerUtils.printAll() kullanın
// TODO: Bir Container<Double> oluşturun ve double değerini ekleyin
// Boş bir satır yazdırın, ardından ContainerUtils.countItems() kullanarak "Number sum: [sum]" yazdırın
// TODO: Bir Container<Number> oluşturun ve üzerinde ContainerUtils.addDefaults() çağırın
// Boş bir satır yazdırın, ardından "After adding defaults:" yazdırın ve ContainerUtils.printAll() kullanın
// TODO: Boş bir Container<Integer> oluşturun
// Varsayılan olarak intValue ile ContainerUtils.getLastOrDefault() kullanın
// Boş bir satır yazdırın, ardından "Last or default: [result]" yazdırın
}
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici Kalıbı