Skip to content

Tag 09: Git, Enums

CodingRobIT edited this page Mar 14, 2023 · 1 revision

Zusammenarbeiten mit Git

Das, was wir uns gerade live angucken nennt man "HEAD". bei IntelliJ auch ersichtlich durch die gelbe Markierung. "main" bezeichnet hierbei die Hauptversion (die immer einwandfrei sein sollte, da diese als Grundlage für die zukünftigen Branches fungiert).

Bildschirmfoto 2023-03-09 um 10 23 54

Alle sich auf das Hauptprojekt beziehende Projekte außerhalb des "HEAD", nennen sich Branches (auch Zweige) und können als stellvertretend für die Arbeit der verschiedenen Mitarbeiter betrachtet werden, die ebenfalls an diesem Projekt arbeiten.

Bildschirmfoto 2023-03-09 um 10 31 31

Wenn mehrere Branches erstellt worden sind, sollte man gemeinsam überlegen welche Branches man zusammenführen möchte.

Bildschirmfoto 2023-03-09 um 10 42 27

Durch Rechtsklick auf das entsprechende Feature lassen sich beide Features/Branches zusammenführen (mergen).

Bildschirmfoto 2023-03-09 um 10 43 18

Sind beide Branches erfolgreich gemerged worden, sieht das Ganze so aus:

Bildschirmfoto 2023-03-09 um 10 44 20

Sobald man ein neues Feature erstellt hat, kann man dieses auf GitHub über "Pull Requests" mit der Main vergleichen und dies gleichzeitig veröffentlichen.

Bildschirmfoto 2023-03-09 um 11 52 41

Wenn man dies erfolgreich geschafft hat, wird dies unter dem Überpunkt "Pull Requests" kurzfristig so angezeigt:

Bildschirmfoto 2023-03-09 um 11 58 13

und bei IntelliJ so:

Bildschirmfoto 2023-03-09 um 12 00 16

Wenn der Partner, mit dem man an einem Projekt zusammenarbeitet, dein Projekt (aka Review) noch nicht bestätigt (approved) hat, erhält man diese Sicht:

Bildschirmfoto 2023-03-09 um 12 08 27

Konflikte beheben

Kommt es zu Konflikten beim Versuch beide Dateien miteinander zu verbinden, öffnet IntelliJ dieses Fenster, welches einem wiederum erlaubt entweder nur die eine Version zu übernehmen oder auch beide zu fusionieren. Des Weiteren kann man im mittigen Fenster die Version auch direkt bearbeiten.

Bildschirmfoto 2023-03-09 um 12 40 19

Durch das Kreuz sowie den Pfeil links und rechts, kann man die jeweilige Version direkt übernehmen oder auch ablehnen. Der kleine Zauberstab in der oberen Leiste hat die Funktion leichte Konflikte direkt automatisch zu beheben.

Kreuz und Pfeil

Bildschirmfoto 2023-03-09 um 12 41 56

Enum

Enums werden verwendet um eine begrenzte Anzahl an Werten festzulegen. Diese Werte sind konstant, also nicht änderbar.

Erstellen von Enums

Um einen Enum zu erstellen wird das enum Keyword verwendet:

public enum EnumName {
  // ...
}

Innerhalb der geschweiften Klammern werden die einzelnen Werte definiert. Diese müssen mit einem Komma separiert werden:

public enum EnumName {
  VALUE_A,
  VALUE_B,
  VALUE_C
}

Ein konkreter Wert eines Enums kann wie folgt einer Variablen zugewiesen werden:

EnumName variablenName = EnumName.VALUE_A

Innerhalb des Enums können weitere Variablen angelegt werden. Diese Variable wird jedem Enum-Value als Instanz-Variable zugewiesen. Jeder Enum-Value hat also 'seinen eigenen Wert'. Es ist darauf zu achten, dass das letzte Enum-Value mit einem Strichpunkt ; abschließt. Um die Instanz-Variable zu nutzen, muss diese wie folgt angelegt werden:

public enum EnumName {
  VALUE_A,
  VALUE_B,
  VALUE_C;

  // Instanz-Variable
  private String additionalInfo;
}

Darüber hinaus muss die Instanzvariable über einen Konstruktor initialisiert werden. Dieser ist per default private. Das private Keyword wird nicht benötigt:

public enum EnumName {
  VALUE_A,
  VALUE_B,
  VALUE_C;

  private String additionalInfo;

  // Konstruktor
  EnumName(String info) {
    additionalInfo = info;
  }
}

Im letzten Schritt werden dem Enum-Value runde Klammern () hinzugefügt. Innerhalb dieser wird der entsprechende Wert festgelegt:

public enum EnumName {
  // Values mit Konstruktoraufruf
  VALUE_A("A"),
  VALUE_B("B"),
  VALUE_C("C");

  private String additionalInfo;

  EnumName(String info) {
    additionalInfo = info;
  }
}

Um von außen auf die Instanz-Variable zugreifen zu können muss ein Getter implementiert werden:

public enum EnumName {
  VALUE_A("A"),
  VALUE_B("B"),
  VALUE_C("C");

  private String additionalInfo;

  EnumName(String info) {
    additionalInfo = info;
  }

  // Getter
  public String getAdditionalInfo() {
    return additionalInfo;
  }
}

Der Zugriff auf die Instanz-Variable wird wie folgt erstellt:

String info = EnumName.VALUE_A.getAdditionalInfo();

Nutzung von Enums am Beispiel einer Getränkebestellung

Angenommen bei einer Getränkebestellung wird die Menge in Milliliter an eine Methode übergeben. Hierbei kann es beim Aufruf zu Fehlern kommen:

Enum1

Um dies zu verhindern kann ein Enum mit festen Werten definiert werden. Dieser Enum enthält zu den Enum-Values noch die Menge in Millilitern:

Enum2

Bei der Verwendung kann nun auf den festgelegten Wert "inMl" zurückgegriffen werden. Undefinierte Werte sind nicht möglich:

Enum3

Auch beim Aufruf der Methode können nur noch die definierten Werte ausgewählt werden:

Enum4

Weiterführende Links

Clone this wiki locally