Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion CleanCode/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,15 @@

This project contains practical examples and best practices inspired by the principles of **Clean Code**.

[Check it out 🔍](src/main/java/pl/mperor/lab/java/Dummy.java)
## Contents 📚

### Domain-Driven Design (DDD) 🏛️

- [Value Object](src/test/java/pl/mperor/lab/java/clean/code/ddd/value/object/ValueObjectTest.java)
- [Command vs Event](src/test/java/pl/mperor/lab/java/clean/code/ddd/CommandVsEventTest.java)

### GRASP 🤲

- [Information Expert](src/test/java/pl/mperor/lab/java/clean/code/grasp/InformationExpertTest.java)

[Check it out 🔍](src/test/java/pl/mperor/lab/java/clean/code)
48 changes: 25 additions & 23 deletions DesignPatterns/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,38 @@
This project explores various design patterns and their implementations in modern Java. It aims to provide developers
with practical examples and best practices for using design patterns to create robust and maintainable code.

Links below lead to the tests showing each pattern in action; the pattern implementations live in the same package under `src/main`.

## Design Pattern Catalog 📚

### Behavioral Design Patterns 💪

- [Chain of Responsibility](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/chain/of/responsibility) 🔗
- [Command](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/command) 📝
- [Execute Around Method (EAM)](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/eam) ⭕
- [Interpreter](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter) 📰
- [Iterator](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/iterator) 🔄
- [Mediator](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/mediator) 🗣️
- [Memento](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/memento) 💾
- [Observer](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/observer) 👀
- [State](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/state) 📜
- [Strategy](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/strategy) 🎯
- [Template Method](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/template/method) 📋
- [Visitor](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/visitor) 🧳
- [Chain of Responsibility](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/chain/of/responsibility) 🔗
- [Command](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/command) 📝
- [Execute Around Method (EAM)](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/eam) ⭕
- [Interpreter](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter) 📰
- [Iterator](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/iterator) 🔄
- [Mediator](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/mediator) 🗣️
- [Memento](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/memento) 💾
- [Observer](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/observer) 👀
- [State](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/state) 📜
- [Strategy](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/strategy) 🎯
- [Template Method](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/template/method) 📋
- [Visitor](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/visitor) 🧳

### Creational Design Patterns 🏭

- [Factory](src/main/java/pl/mperor/lab/java/design/pattern/creational/factory) 🏭
- [Builder](src/main/java/pl/mperor/lab/java/design/pattern/creational/builder) 🏗️
- [Prototype](src/main/java/pl/mperor/lab/java/design/pattern/creational/prototype) 🧬
- [Singleton](src/main/java/pl/mperor/lab/java/design/pattern/creational/singleton) 1️⃣
- [Factory](src/test/java/pl/mperor/lab/java/design/pattern/creational/factory) 🏭
- [Builder](src/test/java/pl/mperor/lab/java/design/pattern/creational/builder) 🏗️
- [Prototype](src/test/java/pl/mperor/lab/java/design/pattern/creational/prototype) 🧬
- [Singleton](src/test/java/pl/mperor/lab/java/design/pattern/creational/singleton) 1️⃣

### Structural Design Patterns 🎁

- [Adapter](src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter) 🔌
- [Bridge](src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge) 🌉
- [Composite](src/main/java/pl/mperor/lab/java/design/pattern/structural/composite) 🌿
- [Decorator](src/main/java/pl/mperor/lab/java/design/pattern/structural/decorator) 🎨
- [Facade](src/main/java/pl/mperor/lab/java/design/pattern/structural/facade) 🏢
- [Flyweight](src/main/java/pl/mperor/lab/java/design/pattern/structural/flyweight) 🪶
- [Proxy](src/main/java/pl/mperor/lab/java/design/pattern/structural/proxy) 🛡️
- [Adapter](src/test/java/pl/mperor/lab/java/design/pattern/structural/adapter) 🔌
- [Bridge](src/test/java/pl/mperor/lab/java/design/pattern/structural/bridge) 🌉
- [Composite](src/test/java/pl/mperor/lab/java/design/pattern/structural/composite) 🌿
- [Decorator](src/test/java/pl/mperor/lab/java/design/pattern/structural/decorator) 🎨
- [Facade](src/test/java/pl/mperor/lab/java/design/pattern/structural/facade) 🏢
- [Flyweight](src/test/java/pl/mperor/lab/java/design/pattern/structural/flyweight) 🪶
- [Proxy](src/test/java/pl/mperor/lab/java/design/pattern/structural/proxy) 🛡️
37 changes: 36 additions & 1 deletion FirstSteps/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,39 @@

**FirstSteps** is a project that serves as a course for this language, attempting to describe it exclusively through examples of source code.

[Check it out 🔍](src/main/java/pl/mperor/lab/java/Dummy.java)
## Contents 📚

### Fundamentals 🌱

- [Java Fundamentals](src/test/java/pl/mperor/lab/java/JavaFundamentalsTest.java)
- [Console Support](src/test/java/pl/mperor/lab/java/ConsoleSupportTest.java)

### Data Types 🔢

- [Primitive Types](src/test/java/pl/mperor/lab/java/data/type/PrimitiveTypesTest.java)
- [Primitive Types Conversion](src/test/java/pl/mperor/lab/java/data/type/PrimitiveTypesConversionTest.java)
- [Number Systems](src/test/java/pl/mperor/lab/java/data/type/NumberSystemsTest.java)
- [Reference Types](src/test/java/pl/mperor/lab/java/data/type/ReferenceTypesTest.java)
- [Strings](src/test/java/pl/mperor/lab/java/data/type/StringTest.java)
- [Arrays](src/test/java/pl/mperor/lab/java/data/type/ArraysTest.java)

### Data Operations ➕

- [Basic Arithmetic](src/test/java/pl/mperor/lab/java/data/operation/BasicArithmeticTest.java)
- [Operators](src/test/java/pl/mperor/lab/java/data/operation/OperatorsTest.java)
- [Expression Types](src/test/java/pl/mperor/lab/java/data/operation/ExpressionTypeTest.java)
- [Primitive vs Reference Types Comparison](src/test/java/pl/mperor/lab/java/data/operation/PrimitiveAndReferenceTypesComparisonTest.java)

### Statements 🔀

- [Control Statements](src/test/java/pl/mperor/lab/java/statement/ControlStatementTest.java)
- [Iteration Statements](src/test/java/pl/mperor/lab/java/statement/IterationStatementTest.java)

### Language Elements 🧱

- [Methods](src/test/java/pl/mperor/lab/java/lang/element/MethodTest.java)
- [Enums](src/test/java/pl/mperor/lab/java/lang/element/EnumTest.java)
- [Packages](src/test/java/pl/mperor/lab/java/lang/element/PackageTest.java)
- [Optional](src/test/java/pl/mperor/lab/java/lang/element/OptionalTest.java)

[Check it out 🔍](src/test/java/pl/mperor/lab/java)
52 changes: 26 additions & 26 deletions JavaReleases/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,32 @@

This project includes unit tests for key functionalities introduced in each Java version.

- [Java 1.0 (Java 0)](src/test/java/pl/mperor/lab/java/Java0.java)
- [Java 1.1 (Java 1™)](src/test/java/pl/mperor/lab/java/Java1.java)
- [Java 1.2 (Java 2™)](src/test/java/pl/mperor/lab/java/Java2.java)
- [Java 1.3 (Java 3™)](src/test/java/pl/mperor/lab/java/Java3.java)
- [Java 1.4 (Java 4™)](src/test/java/pl/mperor/lab/java/Java4.java)
- [Java 1.5 (Java 5™)](src/test/java/pl/mperor/lab/java/Java5.java)
- [Java 1.6 (Java 6™)](src/test/java/pl/mperor/lab/java/Java6.java)
- [Java 1.7 (Java 7™)](src/test/java/pl/mperor/lab/java/Java7.java)
- [Java 1.8 (Java 8™)](src/test/java/pl/mperor/lab/java/Java8.java)
- [Java 9™](src/test/java/pl/mperor/lab/java/Java9.java)
- [Java 10™](src/test/java/pl/mperor/lab/java/Java10.java)
- [Java 11™](src/test/java/pl/mperor/lab/java/Java11.java)
- [Java 12™](src/test/java/pl/mperor/lab/java/Java12.java)
- [Java 13™](src/test/java/pl/mperor/lab/java/Java13.java)
- [Java 14™](src/test/java/pl/mperor/lab/java/Java14.java)
- [Java 15™](src/test/java/pl/mperor/lab/java/Java15.java)
- [Java 16™](src/test/java/pl/mperor/lab/java/Java16.java)
- [Java 17™](src/test/java/pl/mperor/lab/java/Java17.java)
- [Java 18™](src/test/java/pl/mperor/lab/java/Java18.java)
- [Java 19™](src/test/java/pl/mperor/lab/java/Java19.java)
- [Java 20™](src/test/java/pl/mperor/lab/java/Java20.java)
- [Java 21™](src/test/java/pl/mperor/lab/java/Java21.java)
- [Java 22™](src/test/java/pl/mperor/lab/java/Java22.java)
- [Java 23™](src/test/java/pl/mperor/lab/java/Java23.java)
- [Java 24™](src/test/java/pl/mperor/lab/java/Java24.java)
- [Java 25™](src/test/java/pl/mperor/lab/java/Java25.java)
- [Java 1.0 (Java 0)](src/test/java/pl/mperor/lab/java/Java0.java) — classes & interfaces, exceptions, threads, legacy collections, AWT
- [Java 1.1 (Java 1™)](src/test/java/pl/mperor/lab/java/Java1.java) — inner classes, JDBC, reflection, serialization, `java.text` i18n, `BigDecimal`
- [Java 1.2 (Java 2™)](src/test/java/pl/mperor/lab/java/Java2.java) — Collections Framework, Swing
- [Java 1.3 (Java 3™)](src/test/java/pl/mperor/lab/java/Java3.java) — JNDI, Java Sound, `Timer`
- [Java 1.4 (Java 4™)](src/test/java/pl/mperor/lab/java/Java4.java) — `assert`, NIO, regex, exception chaining, logging, ImageIO
- [Java 1.5 (Java 5™)](src/test/java/pl/mperor/lab/java/Java5.java) — generics, for-each, autoboxing, varargs, enums, annotations, `java.util.concurrent`
- [Java 1.6 (Java 6™)](src/test/java/pl/mperor/lab/java/Java6.java) — scripting engines, Compiler API, system tray
- [Java 1.7 (Java 7™)](src/test/java/pl/mperor/lab/java/Java7.java) — try-with-resources, multi-catch, diamond, switch on strings, NIO.2, Fork/Join
- [Java 1.8 (Java 8™)](src/test/java/pl/mperor/lab/java/Java8.java) — lambdas, functional interfaces, streams, `Optional`, `java.time`
- [Java 9™](src/test/java/pl/mperor/lab/java/Java9.java) — `List.of`/`Map.of`, private interface methods, Process API, JShell
- [Java 10™](src/test/java/pl/mperor/lab/java/Java10.java) — `var`
- [Java 11™](src/test/java/pl/mperor/lab/java/Java11.java) — HTTP Client, single-file source launch, `var` in lambdas
- [Java 12™](src/test/java/pl/mperor/lab/java/Java12.java) — JVM Constants API, switch expressions (preview)
- [Java 13™](src/test/java/pl/mperor/lab/java/Java13.java) — dynamic CDS archives, text blocks (preview)
- [Java 14™](src/test/java/pl/mperor/lab/java/Java14.java) — switch expressions, helpful NullPointerExceptions, records (preview)
- [Java 15™](src/test/java/pl/mperor/lab/java/Java15.java) — text blocks, hidden classes, ZGC & Shenandoah
- [Java 16™](src/test/java/pl/mperor/lab/java/Java16.java) — records, pattern matching for `instanceof`, `jpackage`
- [Java 17™](src/test/java/pl/mperor/lab/java/Java17.java) — sealed classes, strong encapsulation of JDK internals, new PRNGs
- [Java 18™](src/test/java/pl/mperor/lab/java/Java18.java) — UTF-8 by default, Simple Web Server, code snippets in Javadoc
- [Java 19™](src/test/java/pl/mperor/lab/java/Java19.java) — virtual threads & record patterns (preview)
- [Java 20™](src/test/java/pl/mperor/lab/java/Java20.java) — scoped values (incubator), second previews
- [Java 21™](src/test/java/pl/mperor/lab/java/Java21.java) — virtual threads, sequenced collections, record patterns, pattern matching for switch
- [Java 22™](src/test/java/pl/mperor/lab/java/Java22.java) — Foreign Function & Memory API, unnamed variables & patterns
- [Java 23™](src/test/java/pl/mperor/lab/java/Java23.java) — Markdown documentation comments
- [Java 24™](src/test/java/pl/mperor/lab/java/Java24.java) — Stream Gatherers, Class-File API, virtual threads without pinning
- [Java 25™](src/test/java/pl/mperor/lab/java/Java25.java) — scoped values, module imports, compact source files, flexible constructor bodies

For detailed examples and tests of each feature, please refer to the individual source files linked above.

Expand Down
26 changes: 24 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# JavaLab 🧪

[![Java CI with Gradle](https://github.com/mperor/JavaLab/actions/workflows/gradle.yml/badge.svg)](https://github.com/mperor/JavaLab/actions/workflows/gradle.yml)
[![Test Results](https://gist.githubusercontent.com/mperor/710a27220e46b738c4a2ccb888676388/raw/badge.svg)](JavaReleases/src/test/java/pl/mperor/lab/java)
[![Test Results](https://gist.githubusercontent.com/mperor/710a27220e46b738c4a2ccb888676388/raw/badge.svg)](https://github.com/mperor/JavaLab/actions/workflows/gradle.yml)

## Description 📄
**JavaLab** serves as an experimental playground and knowledge base for the Java programming language.
Expand All @@ -13,4 +13,26 @@ Each test aims to provide clear examples and answers to common (and not-so-commo
- **[JavaReleases 📅](JavaReleases/README.md): Key features by version**
- **[FirstSteps 👣](FirstSteps/README.md): Java Basics**
- **[DesignPatterns 🧩](DesignPatterns/README.md): Design Patterns in Modern Java**
- **[CleanCode 🧼](CleanCode/README.md): Clean Code**
- **[CleanCode 🧼](CleanCode/README.md): Clean Code**
- **Common 🔧: Shared test utilities (e.g. capturing `System.out` in assertions)**

## Getting Started 🚀

Requires **JDK 25**.

```shell
./gradlew test # all modules
./gradlew :JavaReleases:test # single module
./gradlew :JavaReleases:test --tests "pl.mperor.lab.java.Java8" # single test class
```

## How to Read It 📖

- **Tests are the documentation.** Each test method demonstrates one behavior and asserts it, so every example is verified on every build.
Supporting classes live in `src/main`, but the story is told in `src/test`.
- **Start with what you need:**
[FirstSteps](FirstSteps/README.md) for language fundamentals,
[JavaReleases](JavaReleases/README.md) to see what each version added,
[DesignPatterns](DesignPatterns/README.md) and [CleanCode](CleanCode/README.md) for design.
- **Each `JavaN` class starts with a header** listing the release's features
(language, libraries and tools for Java 1.0–9, JEP numbers for Java 10+), followed by tests for the most relevant ones.
Loading