Aller au contenu

Java pour développeurs C# — Mission

Je pense en C#. Mais une bonne partie du code que je lis chaque jour est du Java : des services Spring, des plugins de build, des bibliothèques dont le portage C# est en retard. Les deux langages se ressemblent tant qu’il est facile d’écrire du Java comme si c’était du C#, et d’être surpris à l’exécution : == entre deux Integer, un type générique qui a disparu, une exception vérifiée (checked) qui ne compile pas.

Ce cours est la carte que j’aurais voulu avoir : pour chaque sujet, ce qui se transpose depuis C#, ce qui n’en a que l’apparence, et ce qui n’a pas d’équivalent.

Vous écrivez du C# avec aisance : classes, interfaces, génériques, LINQ, async/await, NuGet et la CLI dotnet. Vous avez lu un peu de Java sans jamais en livrer. Un cours de suite, Spring Boot, Spring Cloud et Reactor pour développeurs C#, s’appuie sur celui-ci.

  • installer un JDK, exécuter du code Java et compiler un projet avec Maven ou Gradle ;
  • prédire où la sémantique de valeur, l’égalité et les nombres de Java diffèrent de C# ;
  • modéliser des données avec des classes, des records, des enums et des interfaces scellées ;
  • utiliser les génériques en sachant ce que l’effacement de type (type erasure) retire ;
  • gérer les exceptions vérifiées, null et Optional ;
  • traduire LINQ et les délégués en Streams et en interfaces fonctionnelles ;
  • écrire du code concurrent avec des threads virtuels au lieu de async/await ;
  • tester, empaqueter et exécuter une application Java sur la JVM.
# Leçon Vous connaissez déjà
1 Le JDK et les outils de build le SDK .NET, dotnet run, NuGet, .csproj
2 Types, égalité et opérateurs types valeur, checked, ==, interpolation de chaînes
3 Classes, records et enums propriétés, virtual/override, record, enum
4 Génériques et effacement de type génériques réifiés, where T : new(), variance in/out
5 Exceptions, null et Optional (à venir) exceptions, using, types référence nullables
6 Lambdas et interfaces fonctionnelles délégués, Func/Action, événements
7 Collections et Streams List<T>, Dictionary, LINQ
8 Pattern matching expressions switch, motifs is, records
9 Concurrence et threads virtuels Task, async/await, lock, Parallel
10 Maven et Gradle en profondeur NuGet, Central Package Management, solutions
11 Tests xUnit, Moq, FluentAssertions
12 La bibliothèque standard du quotidien DateTime, decimal, HttpClient, System.IO
13 La JVM à l’exécution le CLR, réglages du GC, dotnet-counters, Native AOT
14 Annotations, réflexion et modules attributs, générateurs de source, assemblies

Journal — ce que j’ai essayé, ce qui m’a surpris, ce qu’il me reste à vérifier.