Java Annotated Monthly – December 2023
The December edition of Java Annotated Monthly is here! As usual, you’ll find all the latest Java and Kotlin updates as well as details of key industry events for networking and learning. This issue also features the latest release candidates and targeted JEPs alongside Java tutorials and articles about technologies like Spring, AI, and others.
In addition, we have an ironic piece in the Culture and Community section for those doubting whether they are a good fit for a senior software developer role.
Better Java Streams with Gatherers – Inside Java Newscast #57 – Stream::gather is a new operation you can use with streams in Java. It lets you create various operations without adding too much complexity to the Stream interface. Find out more about it in this newscast.
What’s New in Java 21 – Oracle TV from CloudWorld 2023 – Georges Saab, SVP of Development for Java Platform and Chair of the OpenJDK Governing Board, talks on Oracle TV at CloudWorld 2023 about Java 21’s new features, the Java Playground, community updates, and Java’s future.
Java On The GPU – Inside Java Newscast #58 – Babylon, OpenJDK’s latest major project, focuses on enhancing Java’s performance on GPUs to boost machine learning and AI applications on the JVM. Find out more about it in this newscast by Nicolai Parlog.
Here is the list of new JEP candidates and JEPs targeted to JDK 22 this month:
- New candidate JEP: 461: Stream Gatherers (Preview)
- JEP targeted to JDK 22: 459: String Templates (Second Preview)
- JEP targeted to JDK 22: 460: Vector API (7th Incubator)
- JEP targeted to JDK 22: JEP 456: Unnamed Variables & Patterns
Java Tutorials and Tips
Everything Bad in Java is Good for You – Everything Bad is Good for You is a book that suggests things we often think are bad, like TV, can actually be good for us. What if we apply this idea to Java? Perhaps not all bugs are harmful – some might even make beneficial features. Check out this article to explore this further.
What If Java Collections Had Eager Methods for Filter, Map, FlatMap? – Check out this blog by Donald Raab to discover how to revitalize the twenty-five-year-old Java Collections framework using some advanced Java language features.
How do you know if a Java Collection is Mutable or Immutable? – This blog explains the benefits of using both mutable and immutable collections in Java. It highlights how these practices in the widely-used Java Collections framework contribute to Java’s ongoing success.
Java 21: So How Should We Construct Strings Now? – Java 21 introduces several exciting features, including a preview of String Templates, offering Java developers a new method for string concatenation. Nataliia Dziubenko explores the “proper” way to concatenate strings in modern Java and even draws comparisons with Kotlin’s approach.
Record Patterns – Sip of Java – Watch the video included in the article to learn more about record patterns that were added in Java 21, providing an easier way to extract data from records.
How to find dead code in your Java services – While working with legacy code, we often encounter undocumented or untested code and wonder whether it’s still in use. In his article, Jakob Löhnertz shares his vision of how you can confidently identify and handle such potentially unused code.
Solving the Countdown problem with Java 21’s Language Features – This article explores how to tackle the number game challenges from the Countdown show using the features of Java 21.
Optimizing your equals() methods with Pattern Matching – JEP Cafe #21 – Learn how to create simple and efficient equals() methods for Java classes in this tutorial.
Tutorial – Debugging in Java – If you are not familiar with the concept of debugging, this article can be a good starting point.
Java for desktop applications: Tips and Tricks (Part 1) – Christopher Schnick shares some tricks that you can quickly integrate into your own desktop application projects with minimal effort.
Languages, Frameworks, Libraries, and Technologies
Spring Tips: Spring Boot 3.2 – Watch the video where Josh Long explores the exciting updates in Spring Boot 3.2 and Java 21, including how virtual threads from Project Loom and new features like sealed types and smart switch expressions enhance your applications.
A Bootiful Podcast: GraalVM founder and Oracle vice president Thomas Wuerthinger – In this episode, Josh Long chats with Oracle’s vice president Thomas Wuerthinger about GraalVM, a project he initiated and leads.
The Best Tools for Writing Integration Tests for Spring Boot Web Applications – This blog post introduces six testing tools essential for creating integration tests in Spring Boot web applications.
GraalVM & Spring Boot: Building a Native Executable – Interested in GraalVM? Join us as we experiment with our Google Photos clone, see the challenges we face, and come up with a fair and balanced view of where GraalVM stands today.
Fun Refactoring! – Gilded Rose Kata, Hands-on with Approval Testing – Emily Bache shows how to use Gilded Rose refactoring methods. These can help you practice making your code simpler and cheaper to change.
JetBrains Launches IntelliJ-Based Writing Tool WriterSide – Learn more about a new tool by JetBrains – WriterSide. It allows developers and writers to create technical documentation. The new tool is based on IntelliJ-platform IDEs and has been used to create most of JetBrains products’ documentation for the last few years.
Presentation: ChatGPT and AI: What’s Next in Large Language Model (LLM) Architectures – The recorded talk is about what’s next for big AI models like ChatGPT. Experts will discuss how these new AI ideas could change the field.
Patterns For The Design Of Microservices – Part 2 – This follow-up article continues to explore additional patterns frequently applied in the microservices architecture, providing a deeper understanding of their application and benefits.
htmx Tutorial – 2 Real-Life Use Cases – Discover how htmx works by implementing two features into a practical project: Infinite Scrolling and an asynchronous download button that shows a progress bar as the backend prepares the download.
Table partitioning with Spring and Hibernate – Vlad Mihalcea explores the implementation of table partitioning with Spring and Hibernate, aiming to divide a large table into smaller partition tables for more efficient memory and indexing.
How to cascade DELETE with Spring and Hibernate events – This article demonstrates how you can cascade the DELETE operation for unidirectional associations with Spring Data JPA and Hibernate events.
Creating an OpenAPI Generator from Scratch: From YAML to JetBrains HTTP Client – Julien Lengrand-Lambert guides you through creating your own OpenAPI generator from the ground up, focusing on implementing it for the JetBrains HTTP Client.
In-memory HttpServer Handler – Christian Stein presents an HTTP handler that serves in-memory assets, which is ideal for conducting HTTP client tests with GET or HEAD requests on a predefined set of assets.
API versioning – In this brief article, you will get detailed descriptions of three methods for versioning HTTP APIs: path-based, query-based, and header-based.
Why JUnit’s Dynamic Tests ARE SO GOOD – Marco Codes shows you how to write dynamic tests for a case when you need to extract dimensions, dates, and locations from an image’s metadata and display it in the Google Photos Clone.
Kotlin 1.9.20 Released – Check out the release highlights! K2 is now in Beta for all targets, Kotlin Multiplatform is stable, and many more cool updates are available.
Kotlin Multiplatform Is Stable – Read this article to learn about the evolution of Kotlin Multiplatform (KMP), how it can streamline your development process, and what educational resources are available for you to get the most out of the technology.
Compose Multiplatform 1.5.10 – The Perfect Time To Get Started – Compose Multiplatform is a declarative UI framework built by JetBrains that allows developers to share their applications’ UIs across different platforms. It enables you to reuse up to 100% of your codebase across Android, iOS, desktop, and web. If you want to try it out, read this article for the details.
Kotlin Multiplatform Development Roadmap for 2024 – JetBrains is set to enhance core Kotlin Multiplatform technology, Compose Multiplatform, KMP tooling, and KMP libraries in 2024. Discover our upcoming plans and key priorities in these areas.
Fleet with Kotlin Multiplatform Tooling – Try out a preview for Kotlin Multiplatform support in Fleet, which simplifies the development of multiplatform applications, adding to the already extensive Kotlin support in Fleet.
Amper – Improving the Build Tooling User Experience – This blog post introduces Amper – a tool for improved project configuration.
Headache-Free Reactive Programming With Spring Boot and Kotlin Coroutines – This webinar will teach you how Spring Boot’s coroutine support eliminates the drawbacks of the traditional WebFlux method, offering a blend of reactive features without the added complexity.
A Tour Through Konsist with Igor Wojda – Dave Leeds and his special guest Igor Wojda join forces to show you the use of the Konsist static code analysis tool used to ensure consistency in a codebase as they write assertions for a basic REST service.
Practical magic with animations in Jetpack Compose – The video demonstrates how to create animations in Jetpack Compose.
Conferences and Events
Here are some events you might want to attend in person or online in December:
Harnessing the Power of AI Assistant in IntelliJ IDEA – Online, December 7.
JakartaOne Livestream 2023 – Online, December 5.
Java 21 and beyond & Streamlining testcontainers by Apeldoorn JUG – Apeldoorn, Netherlands, December 7.
London Java Community Unconference – London, United Kingdom, December 19.
Culture and Community
Unexpected Things That Make You a Senior Developer – Have you ever accidentally removed a crucial table or a vital class in a project? If so, you might be a senior developer. Read this post to discover more humorous yet accurate insights about senior developers, as observed by Frank Delporte and Marit van Dijk.
Developer Productivity Engineering: What’s in it for Java Developers? – Developer Productivity Engineering (DPE) is emerging as the next major trend in software development. Read this article to learn what exactly DPE is, how it contributes to developer satisfaction, and how you implement it in your organization.
GDPR for busy developers – Should you fear GDPR and other privacy regulations? Find out in this article.
Random Thoughts 15 years into Software Engineering – After 15 years in software development, with experience ranging from lesser-known startups to major FAANG-level companies in Silicon Valley, Ryan O’Neill shares various insights that could benefit others.
How to Become a High-Performing Software Team – What are the four major elements that enable high-performing software teams? Why do some teams perform better than others? What practices can help teams unleash their potential? Check out what Mark Cruth has to say about these issues and more.
Podcast: Teams, Teamwork, and Generative AI as a Team Member – In this podcast episode, Shane Hastie, Lead Editor of Culture & Methods, talks with SnapLogic’s CTO Jeremiah Stone about building exceptional teams, using AI as a development aid, and tackling the ethical dilemmas faced by the tech industry.
AI Assistant Update – November 2023 – Discover the latest enhancements in AI Assistant, including code autocompletion, automated test generation, and code translation across different programming languages.
String Templates in Java – why should you care? – String concatenation can be error-prone and difficult to read. String templates offer a more efficient way of combining literal text with variable values. In her article, Mala Gupta delves into string templates, explaining their concept and demonstrating their effective usage.
The What, Why, and How of JPA Buddy in IntelliJ IDEA – For those new to JPA Buddy, get ready to explore its intuitive features that simplify JPA entity management and reduce redundant code. This article provides a walkthrough of the JPA Buddy interface and its key functionalities.
That’s all for today!
For the upcoming Java Annotated Monthly, feel free to email or tweet us your content ideas. We welcome article suggestions until December 20. Don’t forget to check out our archive for all past JAM issues – it’s a great place to catch up on any blog posts or articles you might have missed.
Subscribe to Blog updates
The New Terminal (Beta) Is Now in JetBrains IDEs
The new terminal (Beta) is now in JetBrains IDEs and will be available in the new UI starting from the 2024.1 version of the IDEs.
‘HelloWorld’ and ‘main()’ meet minimalistic
In this blog post, I'll cover why and how this feature is helpful for students using hands-on coding examples. I’ll also cover some details and frequently asked questions relevant to educators or experienced programmers. Let's get started. Hi Students - Your HelloWorld code is changing …
Easy Hacks: How To Implement Polymorphism in Java
Polymorphism is the ability of an object to take on different forms. In programming, this means that a variable or a method can have different behaviors depending on the type of object it represents. While the term may sound intimidating to beginners, polymorphism is a powerful tool: it helps you re…
Constructor Makeover in Java 22
Typically, we create alternative solutions for tasks that are necessary, but not officially permitted. For instance, executing statements before super() in a derived class constructor was not officially allowed, even though it was important for, say, validating values being passed to the base class …