Zum Hauptinhalt springen
Dekorationsartikel gehören nicht zum Leistungsumfang.
Kotlin
Das umfassende Handbuch. Über 800 Seiten Kotlin-Wissen mit zahlreichen Beispielen aus der Entwicklerpraxis
Buch von Michael Kofler
Sprache: Deutsch

49,90 €*

inkl. MwSt.

Versandkostenfrei per Post / DHL

auf Lager, Lieferzeit 4-7 Werktage

Kategorien:
Beschreibung

Kotlin ist das neue Schweizer Taschenmesser in der Softwareentwicklung. Ob mobile Apps oder Geschäftslogik am Backend, ob objektorientierte Paradigmen oder funktionale Programmierung mit Lambdas: Kotlin vereint die Stärken zahlreicher beliebter Sprachen zu einem modern Werkzeug für alle Fälle. In diesem umfassenden Handbuch gibt Michael Kofler Ihnen dazu einen Einblick in alle Sprachfeatures und zeigt Ihnen, wie Sie zeitgemäß Software entwicklen.

Aus dem Inhalt:

  • Crashkurs für Java-Umsteiger
  • IDEs: IntelliJ und Android Studio
  • Operatoren, Datentypen, Variablen, Klassen, Methoden: Alle Grundlagen
  • Lambda-Ausdrücke und funktionale Programmierung
  • Objektorientierte Programmierung inkl. Extensions, Delegation und Generics
  • Asynrchrone Programmierung und Koroutinen
  • Netzwerkfunktionen, XML und JSON
  • App-Programmierung mit Jetpack und Jetpack Compose
  • Backend-Entwicklung mit Ktor und Exposed
  • REST-APIs entwicklen und anwenden
  • Pakete, Module und Importe

Kotlin ist das neue Schweizer Taschenmesser in der Softwareentwicklung. Ob mobile Apps oder Geschäftslogik am Backend, ob objektorientierte Paradigmen oder funktionale Programmierung mit Lambdas: Kotlin vereint die Stärken zahlreicher beliebter Sprachen zu einem modern Werkzeug für alle Fälle. In diesem umfassenden Handbuch gibt Michael Kofler Ihnen dazu einen Einblick in alle Sprachfeatures und zeigt Ihnen, wie Sie zeitgemäß Software entwicklen.

Aus dem Inhalt:

  • Crashkurs für Java-Umsteiger
  • IDEs: IntelliJ und Android Studio
  • Operatoren, Datentypen, Variablen, Klassen, Methoden: Alle Grundlagen
  • Lambda-Ausdrücke und funktionale Programmierung
  • Objektorientierte Programmierung inkl. Extensions, Delegation und Generics
  • Asynrchrone Programmierung und Koroutinen
  • Netzwerkfunktionen, XML und JSON
  • App-Programmierung mit Jetpack und Jetpack Compose
  • Backend-Entwicklung mit Ktor und Exposed
  • REST-APIs entwicklen und anwenden
  • Pakete, Module und Importe
Über den Autor
Dr. Michael Kofler studierte Telematik an der TU Graz. Er zählt zu den erfolgreichsten und vielseitigsten Computerbuchautoren im deutschen Sprachraum. Zu seinen Themengebieten zählen neben Linux auch macOS, MySQL, KVM, Visual Basic und Excel-VBA. Viele seiner Bücher wurden übersetzt. Michael Kofler arbeitet auch als Software-Entwickler, Berater sowie als Lehrbeauftragter an einer Fachhochschule.
Zusammenfassung
Crashkurs für Java-Umsteiger inklusive
Inhaltsverzeichnis
Vorwort ... 13

TEIL I Kotlin ... 17

1. Hello World! ... 19

1.1 ... Über Kotlin ... 19

1.2 ... Installation ... 21

1.3 ... 'Hello World!' mit und ohne IDE ausführen ... 24

2. Crashkurs ... 29

2.1 ... Elementare Syntaxregeln ... 29

2.2 ... Konventionen ... 41

2.3 ... Von Java zu Kotlin ... 42

3. Operatoren ... 47

3.1 ... Übersicht ... 47

3.2 ... Anmerkungen ... 49

3.3 ... Priorität von Operatoren ... 59

4. Variablenverwaltung ... 61

4.1 ... Variablen ... 61

4.2 ... Unveränderliche Variablen ... 63

4.3 ... Konstanten und Enumerationen ... 64

4.4 ... Der Umgang mit 'null' ... 65

5. Datentypen ... 69

5.1 ... Die wichtigsten Kotlin-Datentypen ... 69

5.2 ... Zahlen ... 72

5.3 ... Bereiche (Ranges) ... 74

5.4 ... Zufallszahlen ... 76

5.5 ... Boolesche Ausdrücke ... 77

6. Zeichenketten ... 79

6.1 ... Die Klasse 'Char' ... 80

6.2 ... Die Klasse 'String' ... 82

6.3 ... Mit Zeichenketten arbeiten ... 85

6.4 ... Beispiel: Passwortqualität testen ... 94

6.5 ... Die Klasse 'StringBuilder' ... 97

7. Datum und Uhrzeit ... 99

7.1 ... Neue Java-Klassen ('[...]') ... 100

7.2 ... Herkömmliche Java-Klassen ('Date' und 'Calendar') ... 107

7.3 ... Die 'Duration and Time Measurement API' ([...]) ... 113

8. Listen, Sets, Maps und Arrays ... 117

8.1 ... Listen ... 118

8.2 ... Sets ... 132

8.3 ... Maps ... 135

8.4 ... Sequenzen ... 136

8.5 ... Arrays ... 140

9. Verzweigungen und Schleifen ... 147

9.1 ... Die 'if'-Verzweigung ... 147

9.2 ... Die 'when'-Verzweigung ... 150

9.3 ... Die 'for'-Schleife ... 152

9.4 ... Die 'while'-Schleife ... 154

9.5 ... Die 'repeat'-Schleife ... 155

9.6 ... 'break' und 'continue' ... 156

9.7 ... Beispiele: Summen, Produkte, Duplikate und Co. ... 157

10. Funktionen ... 163

10.1 ... Funktionen definieren und aufrufen ... 164

10.2 ... Parameter ... 168

10.3 ... Rekursion ... 172

10.4 ... Lokale Funktionen ... 175

10.5 ... Die 'main'-Funktion ... 176

10.6 ... Beispiel: Pfadsuche ... 177

11. Lambda-Ausdrücke und funktionale Programmierung ... 189

11.1 ... Hello Lambda! ... 190

11.2 ... Lambda-Ausdrücke und Funktionen für Fortgeschrittene ... 192

11.3 ... Beispiel: Funktionen erzeugen und verarbeiten ... 197

11.4 ... 'map', 'filter', 'reduce' und Co. ... 199

11.5 ... Beispiel: Textanalyse mit Lambda-Ausdrücken ... 211

11.6 ... Beispiel: Dosenpyramide in drei Farben ... 213

11.7 ... Objekte verarbeiten ('apply', 'let', 'with' etc.) ... 218

11.8 ... Inline-Funktionen ... 223

12. Klassen und Objekte ... 227

12.1 ... Klassen ... 227

12.2 ... Der Konstruktor ... 233

12.3 ... Eigenschaften ... 240

12.4 ... Eigenschaften später initialisieren ... 245

12.5 ... Zugriffssteuerung ... 249

12.6 ... Beispiel: Bankkonto ... 251

12.7 ... Objekte ohne Klassen ... 253

12.8 ... Beispiel: Quiz ... 261

12.9 ... Enumerationen ... 266

13. Vererbung, Schnittstellen, Extensions ... 271

13.1 ... Vererbung ... 272

13.2 ... Vererbung (Konstruktoren, abstrakte Klassen, Polymorphie) ... 278

13.3 ... Die Klasse 'Any' ... 284

13.4 ... Datenklassen ... 287

13.5 ... Beispiel: Schachfiguren ... 289

13.6 ... Schnittstellen ... 296

13.7 ... Beispiel: Geometrische Objekte mit Schnittstellen verarbeiten ... 303

13.8 ... Extensions ... 304

13.9 ... Receiver-Funktionen ... 309

13.10 ... Infix-Funktionen ... 312

13.11 ... Operator Overloading ... 313

13.12 ... Beispiel: Rechnen mit komplexen Zahlen ... 316

13.13 ... Delegation ... 317

14. Reflection, Generics und Annotationen ... 327

14.1 ... Reflection ... 328

14.2 ... Generics ... 330

14.3 ... Generische Typen: Zusatzregeln und Sonderfälle ... 333

14.4 ... Annotationen ... 344

14.5 ... Type-safe Builder ... 348

15. Exceptions ... 357

15.1 ... Fehlerabsicherung ... 358

15.2 ... Selbst Fehler auslösen ('throw') ... 365

15.3 ... Arbeitstechniken ... 367

16. Pakete, Importe und Module ... 369

16.1 ... Pakete ... 369

16.2 ... Importe ... 370

16.3 ... Module ... 373

TEIL II Programmiertechniken ... 375

17. Asynchrone Programmierung ... 377

17.1 ... Hello Coroutines! ... 378

17.2 ... Koroutinen ausführen ... 382

17.3 ... Koroutinen abbrechen ... 390

17.4 ... Exceptions in asynchronem Code ... 395

17.5 ... Den Zugriff auf gemeinsame Daten synchronisieren ... 398

17.6 ... Suspending Functions ... 401

17.7 ... Asynchroner Code in Android-Apps ... 404

17.8 ... Beispiel: Effizient numerisch integrieren ... 407

18. Dateien verarbeiten (I/O, JSON, XML) ... 411

18.1 ... Umgang mit Dateien und Verzeichnissen ... 412

18.2 ... Textdateien lesen und schreiben ... 419

18.3 ... Download von Dateien ... 422

18.4 ... JSON und Serialisierung ... 422

18.5 ... JSON-Beispiel: Die 'New-York-Times'-Bestseller ... 430

18.6 ... XML ... 432

19. Datenbankzugriff (Exposed) ... 437

19.1 ... Hello Exposed! ... 438

19.2 ... Verbindungsaufbau und Transaktionen ... 442

19.3 ... Data Access Objects (DAO) ... 448

19.4 ... DAO-Beispiel: Bücherdatenbank ... 455

19.5 ... SQL als Domain-specific Language (DSL) ... 462

20. JavaFX ... 473

20.1 ... Hello JavaFX! ... 473

20.2 ... TornadoFX ... 477

TEIL III App-Entwicklung ... 481

21. Hello Android! ... 483

21.1 ... Android Studio installieren ... 484

21.2 ... Das erste Projekt in Android Studio ... 486

21.3 ... Emulator einrichten ... 488

21.4 ... Smartphone einrichten ... 492

21.5 ... Aufbau eines Android-Studio-Projekts ... 494

21.6 ... Eigener Button, eigener Code ... 498

21.7 ... Personalisierung der App ... 505

22. App: Fahrenheit-Umrechner ... 509

22.1 ... Layout ... 510

22.2 ... Der Code zur Temperaturumrechnung ... 512

22.3 ... Debugging ... 518

22.4 ... Screenshots ... 522

23. Android Basics ... 525

23.1 ... Android-Grundlagen ... 525

23.2 ... Steuerelemente ... 527

23.3 ... Texte anzeigen und eingeben ('TextView', 'EditText') ... 529

23.4 ... Buttons ... 533

23.5 ... ImageView ... 535

23.6 ... Layoutregeln ... 541

23.7 ... Listen und Tabellen ('RecyclerView') ... 548

23.8 ... Preferences ... 561

23.9 ... Permissions ... 564

24. Aktivitäten, Fragmente und Menüs ... 573

24.1 ... Aktivitäten und Fragmente ... 574

24.2 ... Beispiel: App mit drei leeren Fragmenten ... 576

24.3 ... Datenaustausch zwischen Fragmenten ... 586

24.4 ... Beispiel: Datenaustausch zwischen drei Fragmenten ... 593

24.5 ... Einfache Menüs (Overflow Menu) ... 597

25. App: Währungsumrechner ... 603

25.1 ... Die Klasse 'CurrencyCalculator' ... 604

25.2 ... Hauptaktivität ... 610

25.3 ... Fragment zur Währungsumrechnung ('MainFragment') ... 611

25.4 ... Einstellungsfragment ('SetupFragment') ... 616

25.5 ... Fragment mit App-Informationen ('AboutFragment') ... 620

26. Jetpack Compose ... 623

26.1 ... Hello Compose! ... 625

26.2 ... Steuerelemente ... 635

26.3 ... Container ... 641

26.4 ... Listen ... 645

26.5 ... Theming ... 648

26.6 ... Aktivitäten und Fragmente ... 651

26.7 ... Beispiel: Fahrenheit-Umrechner ... 656

TEIL IV Backend und Server ... 661

27. Hello Server! ... 663

27.1 ... Hello Ktor! ... 665

27.2 ... Beispiel: URL-Verkürzer ... 670

27.3 ... Beispiel: URL-Verkürzer mit Datenbank-Server ... 675

28. Ktor-Programmiertechniken ... 681

28.1 ... Projekt- und Programmaufbau ... 682

28.2 ... Routing ... 684

28.3 ... Request und Response ......
Details
Erscheinungsjahr: 2020
Fachbereich: Programmiersprachen
Genre: Informatik, Mathematik, Medizin, Naturwissenschaften, Technik
Rubrik: Naturwissenschaften & Technik
Medium: Buch
Reihe: Rheinwerk Computing
Inhalt: 823 S.
ISBN-13: 9783836272773
ISBN-10: 3836272776
Sprache: Deutsch
Herstellernummer: 459/07277
Einband: Gebunden
Autor: Kofler, Michael
Hersteller: Rheinwerk
Rheinwerk Verlag GmbH
Verantwortliche Person für die EU: Rheinwerk Verlag GmbH, Rheinwerkallee 4, D-53227 Bonn, service@rheinwerk-verlag.de
Maße: 238 x 182 x 52 mm
Von/Mit: Michael Kofler
Erscheinungsdatum: 28.10.2020
Gewicht: 1,62 kg
Artikel-ID: 118127215
Über den Autor
Dr. Michael Kofler studierte Telematik an der TU Graz. Er zählt zu den erfolgreichsten und vielseitigsten Computerbuchautoren im deutschen Sprachraum. Zu seinen Themengebieten zählen neben Linux auch macOS, MySQL, KVM, Visual Basic und Excel-VBA. Viele seiner Bücher wurden übersetzt. Michael Kofler arbeitet auch als Software-Entwickler, Berater sowie als Lehrbeauftragter an einer Fachhochschule.
Zusammenfassung
Crashkurs für Java-Umsteiger inklusive
Inhaltsverzeichnis
Vorwort ... 13

TEIL I Kotlin ... 17

1. Hello World! ... 19

1.1 ... Über Kotlin ... 19

1.2 ... Installation ... 21

1.3 ... 'Hello World!' mit und ohne IDE ausführen ... 24

2. Crashkurs ... 29

2.1 ... Elementare Syntaxregeln ... 29

2.2 ... Konventionen ... 41

2.3 ... Von Java zu Kotlin ... 42

3. Operatoren ... 47

3.1 ... Übersicht ... 47

3.2 ... Anmerkungen ... 49

3.3 ... Priorität von Operatoren ... 59

4. Variablenverwaltung ... 61

4.1 ... Variablen ... 61

4.2 ... Unveränderliche Variablen ... 63

4.3 ... Konstanten und Enumerationen ... 64

4.4 ... Der Umgang mit 'null' ... 65

5. Datentypen ... 69

5.1 ... Die wichtigsten Kotlin-Datentypen ... 69

5.2 ... Zahlen ... 72

5.3 ... Bereiche (Ranges) ... 74

5.4 ... Zufallszahlen ... 76

5.5 ... Boolesche Ausdrücke ... 77

6. Zeichenketten ... 79

6.1 ... Die Klasse 'Char' ... 80

6.2 ... Die Klasse 'String' ... 82

6.3 ... Mit Zeichenketten arbeiten ... 85

6.4 ... Beispiel: Passwortqualität testen ... 94

6.5 ... Die Klasse 'StringBuilder' ... 97

7. Datum und Uhrzeit ... 99

7.1 ... Neue Java-Klassen ('[...]') ... 100

7.2 ... Herkömmliche Java-Klassen ('Date' und 'Calendar') ... 107

7.3 ... Die 'Duration and Time Measurement API' ([...]) ... 113

8. Listen, Sets, Maps und Arrays ... 117

8.1 ... Listen ... 118

8.2 ... Sets ... 132

8.3 ... Maps ... 135

8.4 ... Sequenzen ... 136

8.5 ... Arrays ... 140

9. Verzweigungen und Schleifen ... 147

9.1 ... Die 'if'-Verzweigung ... 147

9.2 ... Die 'when'-Verzweigung ... 150

9.3 ... Die 'for'-Schleife ... 152

9.4 ... Die 'while'-Schleife ... 154

9.5 ... Die 'repeat'-Schleife ... 155

9.6 ... 'break' und 'continue' ... 156

9.7 ... Beispiele: Summen, Produkte, Duplikate und Co. ... 157

10. Funktionen ... 163

10.1 ... Funktionen definieren und aufrufen ... 164

10.2 ... Parameter ... 168

10.3 ... Rekursion ... 172

10.4 ... Lokale Funktionen ... 175

10.5 ... Die 'main'-Funktion ... 176

10.6 ... Beispiel: Pfadsuche ... 177

11. Lambda-Ausdrücke und funktionale Programmierung ... 189

11.1 ... Hello Lambda! ... 190

11.2 ... Lambda-Ausdrücke und Funktionen für Fortgeschrittene ... 192

11.3 ... Beispiel: Funktionen erzeugen und verarbeiten ... 197

11.4 ... 'map', 'filter', 'reduce' und Co. ... 199

11.5 ... Beispiel: Textanalyse mit Lambda-Ausdrücken ... 211

11.6 ... Beispiel: Dosenpyramide in drei Farben ... 213

11.7 ... Objekte verarbeiten ('apply', 'let', 'with' etc.) ... 218

11.8 ... Inline-Funktionen ... 223

12. Klassen und Objekte ... 227

12.1 ... Klassen ... 227

12.2 ... Der Konstruktor ... 233

12.3 ... Eigenschaften ... 240

12.4 ... Eigenschaften später initialisieren ... 245

12.5 ... Zugriffssteuerung ... 249

12.6 ... Beispiel: Bankkonto ... 251

12.7 ... Objekte ohne Klassen ... 253

12.8 ... Beispiel: Quiz ... 261

12.9 ... Enumerationen ... 266

13. Vererbung, Schnittstellen, Extensions ... 271

13.1 ... Vererbung ... 272

13.2 ... Vererbung (Konstruktoren, abstrakte Klassen, Polymorphie) ... 278

13.3 ... Die Klasse 'Any' ... 284

13.4 ... Datenklassen ... 287

13.5 ... Beispiel: Schachfiguren ... 289

13.6 ... Schnittstellen ... 296

13.7 ... Beispiel: Geometrische Objekte mit Schnittstellen verarbeiten ... 303

13.8 ... Extensions ... 304

13.9 ... Receiver-Funktionen ... 309

13.10 ... Infix-Funktionen ... 312

13.11 ... Operator Overloading ... 313

13.12 ... Beispiel: Rechnen mit komplexen Zahlen ... 316

13.13 ... Delegation ... 317

14. Reflection, Generics und Annotationen ... 327

14.1 ... Reflection ... 328

14.2 ... Generics ... 330

14.3 ... Generische Typen: Zusatzregeln und Sonderfälle ... 333

14.4 ... Annotationen ... 344

14.5 ... Type-safe Builder ... 348

15. Exceptions ... 357

15.1 ... Fehlerabsicherung ... 358

15.2 ... Selbst Fehler auslösen ('throw') ... 365

15.3 ... Arbeitstechniken ... 367

16. Pakete, Importe und Module ... 369

16.1 ... Pakete ... 369

16.2 ... Importe ... 370

16.3 ... Module ... 373

TEIL II Programmiertechniken ... 375

17. Asynchrone Programmierung ... 377

17.1 ... Hello Coroutines! ... 378

17.2 ... Koroutinen ausführen ... 382

17.3 ... Koroutinen abbrechen ... 390

17.4 ... Exceptions in asynchronem Code ... 395

17.5 ... Den Zugriff auf gemeinsame Daten synchronisieren ... 398

17.6 ... Suspending Functions ... 401

17.7 ... Asynchroner Code in Android-Apps ... 404

17.8 ... Beispiel: Effizient numerisch integrieren ... 407

18. Dateien verarbeiten (I/O, JSON, XML) ... 411

18.1 ... Umgang mit Dateien und Verzeichnissen ... 412

18.2 ... Textdateien lesen und schreiben ... 419

18.3 ... Download von Dateien ... 422

18.4 ... JSON und Serialisierung ... 422

18.5 ... JSON-Beispiel: Die 'New-York-Times'-Bestseller ... 430

18.6 ... XML ... 432

19. Datenbankzugriff (Exposed) ... 437

19.1 ... Hello Exposed! ... 438

19.2 ... Verbindungsaufbau und Transaktionen ... 442

19.3 ... Data Access Objects (DAO) ... 448

19.4 ... DAO-Beispiel: Bücherdatenbank ... 455

19.5 ... SQL als Domain-specific Language (DSL) ... 462

20. JavaFX ... 473

20.1 ... Hello JavaFX! ... 473

20.2 ... TornadoFX ... 477

TEIL III App-Entwicklung ... 481

21. Hello Android! ... 483

21.1 ... Android Studio installieren ... 484

21.2 ... Das erste Projekt in Android Studio ... 486

21.3 ... Emulator einrichten ... 488

21.4 ... Smartphone einrichten ... 492

21.5 ... Aufbau eines Android-Studio-Projekts ... 494

21.6 ... Eigener Button, eigener Code ... 498

21.7 ... Personalisierung der App ... 505

22. App: Fahrenheit-Umrechner ... 509

22.1 ... Layout ... 510

22.2 ... Der Code zur Temperaturumrechnung ... 512

22.3 ... Debugging ... 518

22.4 ... Screenshots ... 522

23. Android Basics ... 525

23.1 ... Android-Grundlagen ... 525

23.2 ... Steuerelemente ... 527

23.3 ... Texte anzeigen und eingeben ('TextView', 'EditText') ... 529

23.4 ... Buttons ... 533

23.5 ... ImageView ... 535

23.6 ... Layoutregeln ... 541

23.7 ... Listen und Tabellen ('RecyclerView') ... 548

23.8 ... Preferences ... 561

23.9 ... Permissions ... 564

24. Aktivitäten, Fragmente und Menüs ... 573

24.1 ... Aktivitäten und Fragmente ... 574

24.2 ... Beispiel: App mit drei leeren Fragmenten ... 576

24.3 ... Datenaustausch zwischen Fragmenten ... 586

24.4 ... Beispiel: Datenaustausch zwischen drei Fragmenten ... 593

24.5 ... Einfache Menüs (Overflow Menu) ... 597

25. App: Währungsumrechner ... 603

25.1 ... Die Klasse 'CurrencyCalculator' ... 604

25.2 ... Hauptaktivität ... 610

25.3 ... Fragment zur Währungsumrechnung ('MainFragment') ... 611

25.4 ... Einstellungsfragment ('SetupFragment') ... 616

25.5 ... Fragment mit App-Informationen ('AboutFragment') ... 620

26. Jetpack Compose ... 623

26.1 ... Hello Compose! ... 625

26.2 ... Steuerelemente ... 635

26.3 ... Container ... 641

26.4 ... Listen ... 645

26.5 ... Theming ... 648

26.6 ... Aktivitäten und Fragmente ... 651

26.7 ... Beispiel: Fahrenheit-Umrechner ... 656

TEIL IV Backend und Server ... 661

27. Hello Server! ... 663

27.1 ... Hello Ktor! ... 665

27.2 ... Beispiel: URL-Verkürzer ... 670

27.3 ... Beispiel: URL-Verkürzer mit Datenbank-Server ... 675

28. Ktor-Programmiertechniken ... 681

28.1 ... Projekt- und Programmaufbau ... 682

28.2 ... Routing ... 684

28.3 ... Request und Response ......
Details
Erscheinungsjahr: 2020
Fachbereich: Programmiersprachen
Genre: Informatik, Mathematik, Medizin, Naturwissenschaften, Technik
Rubrik: Naturwissenschaften & Technik
Medium: Buch
Reihe: Rheinwerk Computing
Inhalt: 823 S.
ISBN-13: 9783836272773
ISBN-10: 3836272776
Sprache: Deutsch
Herstellernummer: 459/07277
Einband: Gebunden
Autor: Kofler, Michael
Hersteller: Rheinwerk
Rheinwerk Verlag GmbH
Verantwortliche Person für die EU: Rheinwerk Verlag GmbH, Rheinwerkallee 4, D-53227 Bonn, service@rheinwerk-verlag.de
Maße: 238 x 182 x 52 mm
Von/Mit: Michael Kofler
Erscheinungsdatum: 28.10.2020
Gewicht: 1,62 kg
Artikel-ID: 118127215
Sicherheitshinweis

Ähnliche Produkte

Ähnliche Produkte