diff --git a/core-java-modules/core-java-14/.mvn/jvm.config b/core-java-modules/core-java-14/.mvn/jvm.config
new file mode 100644
index 0000000000..50f549be0a
--- /dev/null
+++ b/core-java-modules/core-java-14/.mvn/jvm.config
@@ -0,0 +1 @@
+--enable-preview
\ No newline at end of file
diff --git a/core-java-modules/core-java-14/README.md b/core-java-modules/core-java-14/README.md
new file mode 100644
index 0000000000..0648d087be
--- /dev/null
+++ b/core-java-modules/core-java-14/README.md
@@ -0,0 +1,7 @@
+## Core Java 14
+
+This module contains articles about Java 14.
+
+### Relevant articles
+
+- [Guide to the @Serial Annotation in Java 14](https://www.baeldung.com/java-14-serial-annotation)
diff --git a/core-java-modules/core-java-14/pom.xml b/core-java-modules/core-java-14/pom.xml
index b985ada5e6..4f89e87d02 100644
--- a/core-java-modules/core-java-14/pom.xml
+++ b/core-java-modules/core-java-14/pom.xml
@@ -1,53 +1,66 @@
- 4.0.0
- com.baeldung
- core-java-14
- 1.0.0-SNAPSHOT
- core-java-14
- jar
- http://maven.apache.org
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
+ core-java-14
+ core-java-14
+ jar
+ http://maven.apache.org
-
- com.baeldung
- parent-modules
- 1.0.0-SNAPSHOT
- ../../
-
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+ ../../
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit-jupiter.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit-jupiter.version}
+ test
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ ${maven.compiler.release}
+ --enable-preview
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${surefire.plugin.version}
+
+ --enable-preview
+
+
+
+
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
-
- ${maven.compiler.target.version}
-
-
- --enable-preview
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${surefire.plugin.version}
-
- --enable-preview
-
-
-
-
-
-
- 14
- 14
+
+ 14
+ 3.6.1
+ 3.8.1
3.0.0-M3
-
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/textblocks/TextBlocks13.java b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/textblocks/TextBlocks13.java
new file mode 100644
index 0000000000..58d4cf44f3
--- /dev/null
+++ b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/textblocks/TextBlocks13.java
@@ -0,0 +1,46 @@
+package com.baeldung.java14.textblocks;
+
+public class TextBlocks13 {
+ public String getBlockOfHtml() {
+ return """
+
+
+
+ example text
+
+ """;
+ }
+
+ public String getNonStandardIndent() {
+ return """
+ Indent
+ """;
+ }
+
+ public String getQuery() {
+ return """
+ select "id", "user"
+ from "table"
+ """;
+ }
+
+ public String getTextWithCarriageReturns() {
+ return """
+ separated with\r
+ carriage returns""";
+ }
+
+ public String getTextWithEscapes() {
+ return """
+ fun with\n
+ whitespace\t\r
+ and other escapes \"""
+ """;
+ }
+
+ public String getFormattedText(String parameter) {
+ return """
+ Some parameter: %s
+ """.formatted(parameter);
+ }
+}
diff --git a/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/textblocks/TextBlocks14.java b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/textblocks/TextBlocks14.java
new file mode 100644
index 0000000000..90fc15e884
--- /dev/null
+++ b/core-java-modules/core-java-14/src/main/java/com/baeldung/java14/textblocks/TextBlocks14.java
@@ -0,0 +1,16 @@
+package com.baeldung.java14.textblocks;
+
+public class TextBlocks14 {
+ public String getIgnoredNewLines() {
+ return """
+ This is a long test which looks to \
+ have a newline but actually does not""";
+ }
+
+ public String getEscapedSpaces() {
+ return """
+ line 1
+ line 2 \s
+ """;
+ }
+}
diff --git a/core-java-modules/core-java-14/src/main/java/com/baeldung/serial/MySerialClass.java b/core-java-modules/core-java-14/src/main/java/com/baeldung/serial/MySerialClass.java
index 6a013d7b59..b28e53bdaa 100644
--- a/core-java-modules/core-java-14/src/main/java/com/baeldung/serial/MySerialClass.java
+++ b/core-java-modules/core-java-14/src/main/java/com/baeldung/serial/MySerialClass.java
@@ -10,41 +10,41 @@ import java.io.Serializable;
/**
* Class showcasing the usage of the Java 14 @Serial annotation.
- *
+ *
* @author Donato Rimenti
*/
public class MySerialClass implements Serializable {
-
- @Serial
- private static final ObjectStreamField[] serialPersistentFields = null;
-
- @Serial
- private static final long serialVersionUID = 1;
- @Serial
- private void writeObject(ObjectOutputStream stream) throws IOException {
- // ...
- }
+ @Serial
+ private static final ObjectStreamField[] serialPersistentFields = null;
- @Serial
- private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
- // ...
- }
+ @Serial
+ private static final long serialVersionUID = 1;
- @Serial
- private void readObjectNoData() throws ObjectStreamException {
- // ...
- }
+ @Serial
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ // ...
+ }
- @Serial
- private Object writeReplace() throws ObjectStreamException {
- // ...
- return null;
- }
+ @Serial
+ private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
+ // ...
+ }
- @Serial
- private Object readResolve() throws ObjectStreamException {
- // ...
- return null;
- }
+ @Serial
+ private void readObjectNoData() throws ObjectStreamException {
+ // ...
+ }
+
+ @Serial
+ private Object writeReplace() throws ObjectStreamException {
+ // ...
+ return null;
+ }
+
+ @Serial
+ private Object readResolve() throws ObjectStreamException {
+ // ...
+ return null;
+ }
}
\ No newline at end of file
diff --git a/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/textblocks/TextBlocks13UnitTest.java b/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/textblocks/TextBlocks13UnitTest.java
new file mode 100644
index 0000000000..f5fef9be57
--- /dev/null
+++ b/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/textblocks/TextBlocks13UnitTest.java
@@ -0,0 +1,58 @@
+package com.baeldung.java14.textblocks;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.jupiter.api.Test;
+
+class TextBlocks13UnitTest {
+ private TextBlocks13 subject = new TextBlocks13();
+
+ @Test
+ void givenAnOldStyleMultilineString_whenComparing_thenEqualsTextBlock() {
+ String expected = "\n"
+ + "\n"
+ + " \n"
+ + " example text\n"
+ + " \n"
+ + "";
+ assertThat(subject.getBlockOfHtml()).isEqualTo(expected);
+ }
+
+ @Test
+ void givenAnOldStyleString_whenComparing_thenEqualsTextBlock() {
+ String expected = "\n\n \n example text\n \n";
+ assertThat(subject.getBlockOfHtml()).isEqualTo(expected);
+ }
+
+ @Test
+ void givenAnIndentedString_thenMatchesIndentedOldStyle() {
+ assertThat(subject.getNonStandardIndent()).isEqualTo(" Indent\n");
+ }
+
+ @Test
+ void givenAMultilineQuery_thenItCanContainUnescapedQuotes() {
+ assertThat(subject.getQuery()).contains("select \"id\", \"user\"");
+ }
+
+ @Test
+ void givenAMultilineQuery_thenItEndWithANewline() {
+ assertThat(subject.getQuery()).endsWith("\n");
+ }
+
+ @Test
+ void givenATextWithCarriageReturns_thenItContainsBoth() {
+ assertThat(subject.getTextWithCarriageReturns()).isEqualTo("separated with\r\ncarriage returns");
+ }
+
+ @Test
+ void givenAStringWithEscapedWhitespace_thenItAppearsInTheResultingString() {
+ assertThat(subject.getTextWithEscapes()).contains("fun with\n\n")
+ .contains("whitespace\t\r\n")
+ .contains("and other escapes \"\"\"");
+ }
+
+ @Test
+ void givenAFormattedString_thenTheParameterIsReplaced() {
+ assertThat(subject.getFormattedText("parameter")).contains("Some parameter: parameter");
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/textblocks/TextBlocks14UnitTest.java b/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/textblocks/TextBlocks14UnitTest.java
new file mode 100644
index 0000000000..fe671e8638
--- /dev/null
+++ b/core-java-modules/core-java-14/src/test/java/com/baeldung/java14/textblocks/TextBlocks14UnitTest.java
@@ -0,0 +1,21 @@
+package com.baeldung.java14.textblocks;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.jupiter.api.Test;
+
+class TextBlocks14UnitTest {
+ private TextBlocks14 subject = new TextBlocks14();
+
+ @Test
+ void givenAStringWithEscapedNewLines_thenTheResultHasNoNewLines() {
+ String expected = "This is a long test which looks to have a newline but actually does not";
+ assertThat(subject.getIgnoredNewLines()).isEqualTo(expected);
+ }
+
+ @Test
+ void givenAStringWithEscapesSpaces_thenTheResultHasLinesEndingWithSpaces() {
+ String expected = "line 1\nline 2 \n";
+ assertThat(subject.getEscapedSpaces()).isEqualTo(expected);
+ }
+}
\ No newline at end of file