Tracks
/
Java
Java
/
Übungen
/
Karls Sprachen
Karls Sprachen

Karls Sprachen

Lernübung

Einführung

Generische Typen

Ein generischer Typ ist eine generische Klasse oder ein generisches Interface, das über Typen parametrisiert ist. So kann der Compiler die Typsicherheit für die Klasse oder das Interface erzwingen.

Betrachten wir dieses nicht-generische Container-Interface:

class Container {
    private Object object;

    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}

Da es Objekttypen akzeptiert und zurückgibt, funktioniert es mit jedem Nicht-Primitivtyp. Das hat aber seinen Preis: Ein Teil des Codes ruft vielleicht get auf und erwartet Integer, während ein anderer Teil set aufruft und Strings hinzufügt, was zu einer Laufzeitausnahme führt.

Eine generische Klasse und ein generisches Interface haben die folgenden Formate:

class ClassName<T1, T2, ..., Tn> { ... }
interface InterfaceName<T1, T2, ..., Tn> { ... }

Der Typparameter-Abschnitt, der durch spitze Klammern (<>) begrenzt wird und dem Klassen- oder Interface-Namen folgt, gibt die Typparameter (auch Typvariablen genannt) T1, T2, ..., und Tn an. Diese können im Rumpf der Klasse oder des Interface verwendet werden, um generische Typsicherheit zu erreichen.

Hier ist die generische Version von Container:

class Container<E> {
    private E object;

    public void set(E object) { this.object = object; }
    public E get() { return object; }
}

Wenn wir sie erstellen, müssen wir nun angeben, welchen Typ sie enthält, und der Compiler erzwingt diese Einschränkung:

// empty <> can infer from context
Container<String> stringContainer = new Container<>();
// compiler knows this is a String, so it is allowed
stringContainer.set("Some string");
// no cast needed, compiler knows it is a String
String result = stringContainer.get();
// this causes a compiler error:
stringContainer.set(42);

Listen

Listen sind in Java die Sammlung für geordnete Sequenzen. Anders als Arrays kann eine List in ihrer Größe wachsen, um beliebig viele Elemente aufzunehmen. Eine Standardimplementierung ist die ArrayList, die auf einem Array basiert, dessen Größe angepasst werden kann. Eine weitere Standardimplementierung ist die Klasse LinkedList, die auf einer doppelt verketteten Liste basiert.

List-Instanzen können leer sein oder beliebig viele Elemente enthalten (einschließlich Duplikate). List-Instanzen sind ein generisches Interface, das typisiert ist, um anzugeben, welche Art von Objekten sie enthalten können. Zum Beispiel:

List<String> emptyListOfStrings = List.of();
List<Integer> singleInteger = List.of(1);
List<Boolean> threeBooleans = List.of(true, false, true);
List<Object> listWithMultipleTypes = List.of("hello", 1, true);

List-Instanzen haben verschiedene hilfreiche Methoden, um ein Element hinzuzufügen, zu entfernen, abzurufen und zu prüfen, ob es vorhanden ist:

List<Character> vowels = new ArrayList<>(List.of('a', 'e', 'i', 'o', 'i', 'e', 'a'));
int startingSize = vowels.size(); // 7
vowels.add('u'); // vowels is now ['a', 'e', 'i', 'o', 'i', 'e', 'a', 'u']
char a = vowels.get(0); // 'a'
boolean hadI = vowels.remove('i'); // true and vowels is now ['a', 'e', 'o', 'i', 'e', 'a', 'u']
boolean hasI = vowels.contains('i'); // true (still have one more left)

Anleitung

Karl möchte den Überblick über eine Liste von Sprachen behalten, die er auf der Website von Exercism lernen will. Karl muss neue Sprachen hinzufügen, alte entfernen und prüfen können, ob bestimmte Sprachen in der Liste stehen. Es wäre sehr spannend, wenn Karl Java oder Kotlin lernen möchte!

1. Definiere eine Funktion, die prüft, ob die Liste der Sprachen leer ist

Karl muss wissen, ob seine Liste der Sprachen irgendwann leer ist, damit er sich weitere zum Lernen suchen kann! Definiere eine Methode namens isEmpty, die true zurückgibt, wenn keine Sprachen in der Liste sind.

if (languageList.isEmpty()) {
    findMoreLanguagesToLearn();
}

2. Definiere eine Funktion, die eine Sprache zur Liste hinzufügt

Karl freut sich schon darauf, Kotlin und Python zu lernen! Hilf Karl beim Einstieg, indem du eine Methode namens addLanguage definierst, die die Sprache entgegennimmt, die er lernen möchte, und sie der Liste hinzufügt.

languageList.addLanguage("Kotlin");
languageList.addLanguage("Python");

3. Definiere eine Funktion, die eine Sprache aus der Liste entfernt

Karl hat entschieden, dass er Scala gerade nicht lernen möchte. Hilf Karl, sie aus der Liste zu entfernen, indem du eine Methode namens removeLanguage definierst, die die Sprache entgegennimmt, die er entfernen möchte, und sie aus der Liste entfernt.

languageList.removeLanguage("Scala");

4. Definiere eine Funktion, die den ersten Eintrag der Liste zurückgibt

Karl möchte sich an die erste Sprache erinnern, die er der Liste hinzugefügt hat (und die noch in der Liste ist). Definiere eine Methode namens firstLanguage, die die erste Sprache in der Liste zurückgibt.

String kotlin = languageList.firstLanguage(); // "Kotlin"

5. Definiere eine Funktion, die zurückgibt, wie viele Sprachen in der Liste sind

Karl muss wissen, wie viele Sprachen er lernen möchte. Hilf Karl, die Antwort zu finden, indem du eine Methode namens count definierst, die die Anzahl der Sprachen in der Liste zurückgibt.

int two = languageList.count(); // 2

6. Definiere eine Funktion, die feststellt, ob eine Sprache in der Liste ist

Karl versucht sich zu erinnern, ob er Python oder Ruby lernen wollte. Definiere eine Methode namens containsLanguage, die die Sprache entgegennimmt, nach der er fragt, damit Karl es herausfinden kann!

boolean learningPython = languageList.containsLanguage("Python"); // true
boolean learningRuby = languageList.containsLanguage("Ruby"); // false

7. Definiere eine Funktion, die feststellt, ob die Liste spannend ist

Wenn Karl Java oder Kotlin lernen möchte, ist das sehr spannend! Definiere eine Methode namens isExciting, die true zurückgibt, wenn Karl Java oder Kotlin lernen möchte.

javaLanguageList.isExciting() // true
neitherKotlinNorJavaLanguageList.isExciting() // false
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Java Exercism

Bereit, mit Karls Sprachen zu starten?

Melde dich bei Exercism an, um Java mit 26 Konzepte158 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.