Menu
Coddy logo textTech

Özet - Generic Container

Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 58 / 87.

challenge icon

Görev

Kolay

Jenerikler 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 bir Container<T> sınıfı oluşturun. Konteyneriniz, öğeleri dahili olarak depolamak için bir ArrayList<T> kullanmalıdır. Bir öğe eklemek için add(T item), belirli bir konumdaki öğeyi almak için get(int index), öğe sayısını döndürmek için size() ve konteynerin hiç öğe içermediğini kontrol etmek için isEmpty() metotlarını ekleyin. Ayrıca dahili listeyi döndüren bir getAll() 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 sonucu double olarak 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çin printAll kullanın.

    Ardından bir Container<Double> oluşturun ve double değerini buna ekleyin. Boş bir satır yazdırın, ardından Number sum: [sum] kullanarak sumValues yazdırın.

    Daha sonra bir Container<Number> oluşturun ve üzerinde addDefaults çağrısı yapın. Boş bir satır yazdırın, ardından After adding defaults: yazdırın ve içeriği göstermek için printAll kullanın.

    Son olarak boş bir Container<Integer> oluşturun ve tamsayı girdinizi varsayılan değer olarak kullanarak getLastOrDefault metodunu çağırın. Boş bir satır yazdırın, ardından Last 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

Kendi başına pratik yap: Online Java derleyicisi