Java pour développeurs C# — Mission
Pourquoi j’apprends ça
Section intitulée « Pourquoi j’apprends ça »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.
À qui s’adresse ce cours
Section intitulée « À qui s’adresse ce cours »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.
À la fin de ce cours, je saurai
Section intitulée « À la fin de ce cours, je saurai »- 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,
nulletOptional; - 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.
Ressources
Section intitulée « Ressources »- dev.java — les tutoriels Java officiels d’Oracle, à jour des dernières versions.
- The Java Language Specification, Java SE 25 — la référence quand deux tutoriels ne sont pas d’accord.
- Documentation de l’API Java SE 25.
- Index des JEP d’OpenJDK — chaque évolution du langage et de la JVM, avec sa motivation.
- Maven — Getting Started et le manuel utilisateur de Gradle.