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

Genericler 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 bir Container<T> sınıfı oluşturun. Konteynırınız, öğeleri depolamak için dahili olarak 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 konteynırın boş olup olmadığını kontrol etmek için isEmpty() metotlarını ekleyin. Ayrıca dahili listeyi döndüren bir getAll() 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 sonucu double olarak 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çin printAll metodunu 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ından countItems kullanarak Number sum: [sum] yazdırın.

    Daha sonra bir Container<Number> oluşturun ve üzerinde addDefaults metodunu çağırı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 girdi olarak aldığınız tam sayıyı 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ı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