Ö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
KolayJenerikler hakkında öğrendiğiniz her şeyi bir araya getiren çok yönlü bir depolama sistemi oluşturalım! Her türden öğeyi depolayabilen, alabilen ve işleyebilen bir Container sınıfı oluşturacak, ayrıca wildcard'ların kullanımını gösteren yardımcı metotlar ekleyeceksiniz.
Kodunuzu üç dosya arasında düzenleyeceksiniz:
Container.java: Bir öğe koleksiyonunu yöneten genel birContainer<T>sınıfı oluşturun. Konteyneriniz, öğeleri dahili olarak depolamak için 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 konteynerin hiç öğe içermediğini kontrol etmek içinisEmpty()metotlarını ekleyin. Ayrıca dahili listeyi döndüren birgetAll()metodu da ekleyin.ContainerUtils.java: Konteynerlerinizle çalışan, statik genel metotlara sahip bir yardımcı sınıf oluşturun:printAll(Container<?> container)- Herhangi bir konteynerdeki tüm öğeleri, satır başına bir öğe olacak şekilde yazdırmak için sınırsız bir wildcard kullanır.countItems(Container<? extends Number> container)- Konteynerdeki tüm sayısal değerlerin toplamını hesaplamak ve sonucudoubleolarak döndürmek için üst sınırlandırılmış bir wildcard kullanır.addDefaults(Container<? super Integer> container)- Tamsayıları tutabilen herhangi bir konteynere 1, 2 ve 3 tamsayılarını eklemek için alt sınırlandırılmış bir wildcard kullanır.<T> T getLastOrDefault(Container<T> container, T defaultValue)- Konteynerdeki son öğeyi veya konteyner boşsa varsayılan değeri döndüren genel bir metottur.Main.java: Genel konteyner sisteminizi bir araya getirin! Üç girdi alacaksınız: bir kelime (String), bir tamsayı ve bir double.İlk olarak bir
Container<String>oluşturun ve kelimeyi buna iki kez ekleyin.String container:yazdırın, ardından içeriğini görüntülemek içinprintAllkullanın.Ardından bir
Container<Double>oluşturun ve double değerini buna ekleyin. Boş bir satır yazdırın, ardındanNumber sum: [sum]kullanaraksumValuesyazdırın.Daha sonra bir
Container<Number>oluşturun ve üzerindeaddDefaultsçağrısı yapı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 tamsayı girdinizi 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ırayla üç girdi alacaksınız: bir kelime (String), bir tamsayı ve bir double.
Bu görev; genel sınıfları, genel metotları, sınırlandırılmış tür parametrelerini ve üç wildcard türünün tamamını bir araya getirir. Her parçanın farklı bir amaca nasıl hizmet ettiğine dikkat edin: genel sınıf tür güvenli depolama sağlar, sınırlandırılmış wildcard'lar esnek okuma ve yazmayı mümkün kılar, genel metotlar ise farklı konteyner 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ştur ve kelimeyi iki kez ekle
// "String container:" yazdır, ardından ContainerUtils.printAll() kullan
// TODO: Bir Container<Double> oluştur ve double değerini ekle
// Boş bir satır yazdır, ardından ContainerUtils.countItems() kullanarak "Number sum: [sum]" yazdır
// TODO: Bir Container<Number> oluştur ve üzerinde ContainerUtils.addDefaults() çağır
// Boş bir satır yazdır, ardından "After adding defaults:" yazdır ve ContainerUtils.printAll() kullan
// TODO: Boş bir Container<Integer> oluştur
// intValue varsayılan olacak şekilde ContainerUtils.getLastOrDefault() kullan
// Boş bir satır yazdır, ardından "Last or default: [result]" yazdır
}
}
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ıKendi başına pratik yap: Online Java derleyicisi