Postsshare & followShare this post with your community:I'm active on various platforms. Watch this space or follow me there to get notified when I publish new content:▼s+fShare this post with your community:I'm active on various platforms. Watch this space or follow me there to get notified when I publish new content:Java 20 🥱#post#java‑20The list of big new features that can be used in production with Java 20 is rather short: . (That was it already.) Pretty boring, these six-month releases. We really don't need to take a closer look ...2023-03-14How To Use switch In Modern Java#post#switch #pattern‑matchingSince Java 14 introduced switch expressions, using switch isn't as straight-forward as it used to be: colons or arrows, statement or expression, labels or patterns? Here's how to best use switch in modern Java.2022-04-19Configuring Maven For Compiled And Tested Code In Javadoc#post#java‑18 #documentation #toolsFor JDK 18's / JEP 413's embedded snippets to be compiled and tested by your Maven build, they need to be added to a source set, Surefire needs to pick them up, and Javadoc needs to know their location - here's how to do that.2022-02-10More Opinions On Optional#post#optionalHow much work is it to wrap Optional? Do you need to null-check Optional arguments? What about serializability and framework support? And why consider the type in the first place? Answers in here!2022-01-27Better Random Number Generation in Java 17#post#java‑17 #randomJava 17 expands the API for random number generation to make it more usable, extensible, and robust with RandomGenerator and RandomGeneratorFactory at its core.2021-09-13Visitor Pattern Considered Pointless - Use Pattern Switches Instead#post#patterns #pattern‑matching #sealedIn modern Java, the visitor pattern is no longer needed. Using sealed types and switches with pattern matching achieves the same goals with less code and less complexity.2021-07-08Why Java's Records Are Better* Than Lombok's @Data and Kotlin's Data Classes#post#java‑16 #records #rantWhile all three remove boilerplate, the similarities don't go much further. Records have stronger semantics with important downstream benefits, which makes them better*. (* not always; depends on circumstances; excuse the clickbait)2021-05-05Definitive Guide To Java 16#post#java‑16A detailed guide to Java 16: records, type patterns, sealed classes; Stream and HTTP/2 additions, Unix domain socket support; Project Panama previews, packaging tool, performance improvements, and more2021-03-16Code-First Unix Domain Socket Tutorial#post#java‑16Java's socket channel / server-socket channel API can use Unix domain sockets for faster and more secure inter-process communication on the same host2021-03-03Type Pattern Matching with instanceof#post#java‑16 #java‑basics #pattern‑matchingType patters with instanceof are Java's first step towards pattern matching. Motivation, syntax, details, and future applications - here's all you need to know.2021-02-23Pattern Matching in Java#post#java‑basics #pattern‑matchingJava takes its first steps towards pattern matching but the topic is much larger than instanceof. Goals, terminology, flow scoping - these apply to all kinds of patterns.2021-02-16Sorting A React App Into Java's Folder Structure#post#js #libraries #toolsHow to use react-app-rewired to sort a React app into a Java folder structure with package.json at the root, and sources in src/{main|test}/js2021-01-19Java 2077#post#java‑next #project‑amber #project‑jigsaw #project‑leyden #project‑loom #project‑panama #project‑valhallaThe year is 2077, the Java version is 128. It's not LTS. Here's how Loom, Valhalla, Panama, Leyden, Amber, and Jigsaw pushed humanity to the brink. And how you can save us.2020-12-10Broken Stream::group with Java 16's mapMulti#post#java‑16 #streamsJava 16 adds a new method mapMulti to Stream and it can be abused to simulate a reverse-flatMap aka group operation (with shortcomings).2020-11-16Faster flatMaps with Stream::mapMulti in Java 16#post#java‑16 #streams #performanceJava 16 adds a new method mapMulti to Stream. It fills the same role as flatMap, but is more imperative - and faster.2020-11-04Java Modules Cheat Sheet#post#j_ms #java‑9 #java‑11A cheat sheet for building and running Java modules from the command line with javac, jar, and java2020-10-19JUnit Pioneer 1.0#post#junit‑pioneer #junit‑5 #testingYesterday we released JUnit Pioneer 1.0 🥳 - here's a quick rundown of its features2020-10-07Definitive Guide To Java 13#post#java‑13A detailed guide to Java 13: text blocks, switch expressions with yield, ZGC, dynamic AppCDS archives2019-09-17Improve Launch Times On Java 13 With Application Class-Data Sharing#post#java‑10 #java‑12 #java‑13 #performanceOn Java 10+, you can use application class-data sharing to reduce launch times, response time outliers, and memory footprint. By archiving class data with -Xshare:dump and loading it with -Xshare:on, the JVM's class loading workload can be reduced considerably.2019-09-15Definitive Guide To Switch Expressions In Java 13#post#java‑13 #java‑basics #switchJava 13 finalized switch expressions. Together with a new lambda-style arrow syntax, this makes switch more expressive and less error-prone.2019-08-16The JPMS Maturity Model#post#j_msJava's module system requires consistent support by libraries, frameworks, and tools. This maturity model classifies a project's support for the JPMS.2019-08-07Evolving Java With ––enable –preview aka Preview Language Features#post#java‑nextUse --enable-preview (plus --source or --release during compilation) to experiment with Java's preview features2019-07-11Definitive Guide To Text Blocks In Java 13#post#java‑13 #java‑basicsJava 13 introduces text blocks: string literals that span multiple lines. Learn about syntax, indentation, escape sequences, and formatting.2019-06-19Immutable Collections In Java - Not Now, Not Ever#post#collectionsThe JDK contains immutable collections, but no type ImmutableCollection. Here's why that's so and why it won't change.2019-05-29Jakarta EE, javax, And A Week Of Turmoil#post#community #jakartaDuring a week of turmoil, many people have written about Jakarta EE and javax. This post summarizes the community's opinions and gives you plenty of links.2019-05-13Definitive Guide To Java 12#post#java‑12 #migrationDetailed Java 12 guide: migration, versions; switch expressions, teeing collectors, indenting/transforming strings (and more); default CDS, Shenandoah, G1.2019-03-18Teeing Collector in Java 12#post#java‑12 #streamsThe teeing collector, available since Java 12 as Collectors::teeing, forwards its input to two other collectors before merging their results with a function.2019-03-04Eleven Hidden Gems In Java 11#post#java‑11Eleven small but shiny additions in Java 11 to classes like String, Path, Files, Collection, Optional, and others that make coding a little more elegant.2018-11-12Scripting Java 11, Shebang And All#post#java‑11 #tools #on‑rampOn Java 11+, you can run a single source file without compiling it. Beyond experimentation, you can write scripts this way. Even shebang is supported!2018-11-06Reactive HTTP/2 Requests And Responses In Java 11#post#java‑11With Java 11's new reactive HTTP/2 API, request and response bodies can be handled with reactive streams: you can throttle, stream, and cancel early.2018-10-22Java 11 HTTP/2 API Tutorial#post#java‑11 #java‑basicsTutorial for Java 11's new HTTP/2 API with HttpClient, HttpRequest, and HttpResponse at its center. Shows synchronous and asynchronous request handling.2018-10-15All You Need To Know For Migrating To Java 11#post#java‑11 #migrationMigrating from Java 8 to Java 11? This has got you covered: licensing, long-term support, preparations, version requirements, migration challenges, and more.2018-09-25JUnit 5 Architecture or "What's Jupiter?"#post#architecture #junit‑5 #libraries #testingThe JUnit 5 architecture promotes a better separation of concerns than JUnit 4 did. It also provides clear APIs for testers (Jupiter) and tools (Platform).2018-08-05JUnit 5 Basics: @Test, Lifecycle, Assertions, Assumptions, And More#post#java‑basics #junit‑5 #libraries #testingThe Basics of JUnit 5: How to use @Test, @BeforeAll, @BeforeEach, @AfterEach, @AfterAll, assertions, and assumptions. How to disable, name, and tag tests.2018-08-05JUnit 5 Conditions: @Enabled, @Disabled, Customized#post#junit‑5 #libraries #testingA detailed look at JUnit 5's @Disabled, @DisabledOnOs, @DisabledOnJre, etc. and how to create custom conditions to flexibly disable test methods.2018-08-05JUnit 5 - Dynamic Tests#post#junit‑5 #lambda #libraries #testingWith JUnit 5's dynamic tests, we can create tests at run time, for example to parameterize tests, create hierarchical test plans, or define tests with lambdas.2018-08-05JUnit 5 Extension Model: How To Create Your Own Extensions#post#architecture #junit‑5 #libraries #testingThe JUnit 5 extension model enables detailed, flexible, and powerful additions to JUnit 5's core features. For that it provides specific extension points.2018-08-05JUnit 5 - Parameterized Tests#post#junit‑5 #libraries #testingThorough introduction to parameterized tests in JUnit 5 with @ParameterizedTest, argument sources (eg @MethodSource, @CsvSource), and argument converters.2018-08-05JUnit 5 Setup in IntelliJ, Eclipse, Maven, and Gradle#post#tools #junit‑5 #libraries #testingHow to set up JUnit 5 so tests run in IntelliJ, Eclipse, Maven, Gradle or, if all else fails, via JUnit 4 or on the command line.2018-08-05Unlocking Traits With var#post#default‑methods #java‑10 #lambda #varIn Java 10, var makes it is possible to ad-hoc combine traits into an instance that matches your exact requirements. Alas, it has some downsides.2018-06-25Tricks with var and anonymous classes (that you should never use at work)#post#anonymous‑classes #java‑10 #varLocal-variable type inference with var makes it easier to work with anonymous classes, e.g. for ad-hoc fields and methods. Don't do it, though!2018-06-18Unlocking Intersection Types With var#post#generics #java‑10 #varJava 10's var makes intersection types in Java more approachable. Generics tricks are still needed, but var makes it easy to declare such variables.2018-06-11How To Use Multi-release JARs To Target Multiple Java Versions#post#tools #java‑9Multi-release JARs allow you to create a single JAR that contains bytecode for several Java versions with jar --version 9 (or 10, or...). Presented with a multi-release JAR, JVMs version 9 and later will load the code that was included for their version.2018-02-26Code-First Java 9 Tutorial#post#java‑9 #migration #streams #optional #collections #j_msShowing code for the most important Java 9 features: private interface methods, stream and optional APIs, collection factories, reactive streams, stack walking, multi-release JARs, redirected platform logging, unified logging, the module system, and more. If you're new to Java 9, start here.2018-02-05Goodbye 2017, Hello 2018#post#turn‑of-the-year2017 draws to a close and 2018 is knocking. My annual review and preview went to my newsletter, so subscribe or head over to Medium to read them.2017-12-31Maven on Java 9 and later - Six Things You Need To Know#post#java‑9 #toolsHow to use the compiler executable, toolchains, and mavenrc to run Maven on Java 9 and how to use mvn/jvm.config and profiles to configure your build.2017-12-18First Contact With 'var' In Java 10#post#java‑10 #java‑basics #varJava 10 introduces the var keyword, which lets the compiler infer local variable types. Here's how var works, why it exists, how it impacts readability.2017-11-16Making JSR 305 Work On Java 9#post#java‑9 #j_ms #migrationUsing annotations from JSR-305 (@Nonnull, @Nullable) and javax.annotation (@Generated, @PostConstruct) on Java 9 causes a split package. Here's the fix.2017-10-23Code-First Java Module System Tutorial#post#java‑9 #java‑basics #j_msTutorial of Java 9 module system basics: declare modules with module-info.java, compile, package, launch them, learn of module path and readability graph.2017-10-03Unified Logging Of JVM Messages With The -Xlog Option#post#java‑9 #java‑basicsJava 9 introduces unified logging, a central mechanism configurable with -Xlog to observe class loading, threading, garbage collector, module system, etc.2017-09-27Five Command Line Options To Hack The Java Module System#post#java‑9 #j_msGet your code running on the Java 9 Module System with the command line options --add-exports, --add-opens, --add-modules, --add-reads, and --patch-module.2017-09-11Planning Your Java 9 Update#post#java‑9 #jdeps #migrationA Java 9 update is not always trivial; quite the opposite, migrating to Java 9 can be challenging. Here's how to gather and categorize problems.2017-08-14Java 9 Migration Guide: The Seven Most Common Challenges#post#java‑9 #j_ms #migrationSolutions to the seven most common challenges for a Java 9 migration. Each of them explained with background, symptoms, and fixes.2017-07-24A JDeps Tutorial - Analyze Your Project's Dependencies#post#java‑basics #j_ms #jdeps #toolsJDeps is a dependency analysis tool for Java bytecode (class files and JARs). Learn how to use filters, aggregate results, and create diagrams.2017-07-17Java 9 Resources - Talks, Articles, Repos, Blogs, Books And Courses#post#java‑9Java 9 draws and the number of posts and talks about it skyrocketed in the recent months. Here's a list of recommended talks and articles but also further resources where new, high-quality content will pop up.2017-05-02Optional Dependencies with requires static#post#java‑9 #j_msThe Java Platform Module System allows optional dependencies with requires static. They are accessible at compile but can be absent at run time.2017-04-03Repackaging Exceptions In Streams#post#clean‑code #java‑8 #lambda #streamsHow to repackage checked exceptions that get thrown in a Java stream pipeline so that they can be thrown without the compiler complaining about it.2017-02-13Why Elvis Should Not Visit Java#post#clean‑code #optional #rantThe desire for the Elvis operator for easier null-handling echoes through the Java community. But due to Java's type system, it should never be introduced!2017-01-31SPJCN IV: Quo Vadis Scala#post#community #scalaIn the fourth issue of SitePoint’s Java Channel Newsletter (from October 21st 2016) I summarize the discussion of Scala's presumable demise.2017-01-26Reflection vs Encapsulation#post#java‑9 #j_ms #project‑jigsaw #reflectionReflection wants to break into all code; encapsulation wants to give modules a safe space. How can this stand off be resolved?2017-01-18Hello 2017!#post#turn‑of-the-yearTo finish all the projects I started in 2016, I will have to be disciplined and focused in 2017. Discipline and focus, what delightful words to start 2017.2017-01-01Goodbye 2016, Sorry For Fucking Up#post#turn‑of-the-yearBesides humanity as a whole fucking up 2016, it went well for me professionally. Maybe because I only cared about me? Possible...2016-12-29SPJCN III: JavaOne 2016#post#communityIn the third issue of SitePoint’s Java Channel Newsletter (from October 7th 2016) I summarize JavaOne 2016 and recommend interesting talks to watch.2016-12-21Publishing Snapshots With Gradle's maven-publish Plugin#post#toolsA step by step tutorial how to use Gradle and the maven-publish plugin to publish snapshots to Sonatype's Maven snapshot repo.2016-12-14SPJCN II: What's Taking So Long?#post#java‑9 #project‑jigsawIn the second issue of SitePoint’s Java Channel Newsletter (from September 23rd 2016) I wonder why Java 9 takes so long.2016-12-07What Future Java Might Look Like#post#java‑next #project‑valhalla #generics #pattern‑matching #primitive‑classesJava's future is full of cool advances: data classes, value types, generics over primitives, pattern matching, etc. Let's peek into Java's future!2016-12-01SPJCN I: Hello World#post#communityIn the first issue of SitePoint's Java Channel Newsletter (September 9th 2016) I babble about community and conferences.2016-11-24Code Reviews At Disy - Observations#post#code‑review #techniquesAfter reviewing almost all code we wrote for 18 months, completing some 1'500 reviews, we want to share some recommendations.2016-10-26Code Reviews At Disy - How We Review#post#code‑review #techniquesAfter setting out to create a peer review culture we came up with a workflow and picked a tool (yes, Crucible) that would help us get there.2016-09-26The Ultimate Guide To Java 9#post#java‑next #java‑9Java 9 is coming! Besides Jigsaw it brings new language features and many new and improved APIs. Check out the ultimate guide.2016-09-05Rebutting 5 Common Stream Tropes#post#java‑8 #rant #streamsArticles about Java 8's streams often repeat a bunch of tropes: succinctness, ugly mechanics, anemic pipelines, weak exception handling. This is a rebuttal!2016-09-01Code Reviews At Disy - Where We Were And What We Wanted#post#code‑review #techniquesAt Disy we review almost all the code we write. Here, we want to share why that was not always the case and how we started with code reviews.2016-08-15Goodbye Disy, Hello SitePoint#post#metaI worked for Disy for about 2 years. Now I said goodbye to become the editor of SitePoint's burgeoning Java channel and have more time for other projects.2016-08-04Oh No, I Forgot Stream::iterate!#post#java‑9 #streamsIn Java 9 Stream gets a couple of new methods - one of them is an overload of iterate that takes a predicate and returns a finite stream.2016-07-25Java 9 Additions To Optional#post#java‑9 #optionalJava 9 is coming! One of the changes are new methods on Optional: stream(), or(), and ifPresentOrElse(), which considerably improve Optional's API.2016-06-26Java 9 Additions To Stream#post#java‑9 #streamsJava 9 is coming! One of the many changes are new Stream methods: takeWhile, dropWhile, and ofNullable. For more fun with streams!2016-06-20How To Implement hashCode Correctly#post#java‑basicsSo you wrote a nice equals implementation? Great! But now you have to implement hashCode as well. Let’s see how to do it correctly.2016-06-13How To Implement equals Correctly#post#java‑basicsA fundamental aspect of any Java class is its definition of equality. It is determined by a class's equals method. Let's see how to implement it correctly.2016-06-06JEEConf 2016#post#communityMy take on JEEConf 2016: showing the talks I liked the best, raving about the community, romanticizing Kiev, and giving some feedback. Summary: awesome!2016-05-25CodeFX Leveled Up#post#metaA lot of things are happening right now: I'm writing a book, I'll speak at conferences, you can hire me, and to top it off, I gave this blog a new look.2016-05-14A Doomed Code Review#post#code‑review #techniquesCode reviews should be brief, short, and focused. This is the story of how I fucked up on all those accounts and we still made it work.2016-04-26Seven Reasons Against Blogging#post#meta #rantMany people will tell you how great blogging is but there are downsides, too, and they are rarely discussed. So let me share some reasons against blogging.2016-03-17Building Atom On Gentoo#post#toolsSee how to build Atom on Gentoo straight from the sources.2016-03-07Costs And Benefits Of Comments#post#clean‑comments #documentationAs with most things in software development the ultimate currency for comments is time. This is an analysis of the costs and benefits of comments.2016-02-08Implied Readability With requires transitive#post#java‑9 #j_msIn Java 9 a module must read another to use its API. With implied readability a 3rd module passes the dependency on, allowing the 1st to read the 2nd.2016-01-27Beware Of findFirst() And findAny()#post#java‑8 #streamsStream.findFirst() and findAny() work with any number of elements in the stream. Make sure to reduce(toOnlyElement()) if there should be at most one.2016-01-14Hello 2016!#post#turn‑of-the-yearIn 2016 I want to continue blogging, branch out into new areas, work on my private projects, learn me a Haskell, and prevent exhaustion.Wow, so much to do.2016-01-03Goodbye 2015!#post#turn‑of-the-year2015 is over and I'm looking back.How did it go, which things worked out and which didn't. And how come I'm feeling so tired recently.2015-12-31Jigsaw Hands-On Guide#post#java‑next #project‑jigsawA Jigsaw tutorial explaining how to create modules, state dependencies between them, and use the module system as a service locator to decouple modules.2015-12-25JDeps Maven Plugin 0.2 Released#post#java‑9 #jdeps #tools #project‑jigsawWith v0.2 the JDeps Maven Plugin allows the creation of flexible exceptions from build-breaking for a self-paced preparation for Java 9 and Project Jigsaw.2015-12-07Six-Month Delay Of Java 9 Release#post#java‑next #java‑9 #project‑jigsawMark Reinhold proposed a six-month delay of JSR 376 / Project Jigsaw and thus of the Java 9 release. According to this JDK 9 would come out in March 2017.2015-12-02JUnit Lambda - The Prototype#post#junit‑5 #libraries #testingJUnit Lambda will eventually bring us JUnit 5. This is a discussion of the recent prototype, its features, core principles and compatibility considerations.2015-11-23JavaOne 2015: Under The Hood Of Project Jigsaw#post#java‑next #impulse #java‑9 #community #project‑jigsawJavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one gives a peek under the hood discussing layers and class loaders.2015-11-13JavaOne 2015: Advanced Modular Development#post#java‑next #impulse #java‑9 #community #project‑jigsawJavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one details different migration scenarios.2015-11-11JavaOne 2015: Introduction to Modular Development#post#java‑next #impulse #java‑9 #community #project‑jigsawJavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one introduces the basic concepts.2015-11-09JavaOne 2015: Prepare For JDK 9#post#java‑next #impulse #java‑9 #community #project‑jigsawJavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one explains how to prepare for it.2015-11-05Will There Be Module Hell?#post#java‑next #java‑9 #project‑jigsawJava 9's Project Jigsaw promises to solve JAR hell but falls short when it comes to conflicting versions. Will there be module hell instead?2015-10-26JAR Hell#post#java‑basicsA list of the problems that make up JAR hell (classpath hell, dependency hell) and how they relate to development tools like Maven and OSGi.2015-10-19Apache JMeter Tutorial#post#performance #toolsWant to load test your web app? Then you should know about Apache JMeter! This tutorial explains the basics and how to create & execute a test plan.2015-10-05A Taxonomy Of Comments#post#clean‑comments #documentationA taxonomy of source code comments that enables further discussion about clean code and comments.2015-09-28Stream Performance - Your Ideas#post#java‑8 #performance #streamsAnother post about stream performance - this one implements your ideas about how else to approach the topic.2015-09-18Stream Performance#post#java‑8 #performance #streamsA close look at stream performance. How do they compare to for and for-each loops oder arrays and lists. And what role plays boxing?2015-09-07Java 8 SE Optional, a strict approach#post#java‑8 #optionalStephen Colebourne presented his pragmatic approach to using Optional. I argue for a stricter one that gets us further without considerable downsides.2015-08-27Interview About Comments On DZone#post#clean‑comments #documentationMatt Werner from DZone interviewed me about my stance on comments.2015-08-14Impulse: "Adventures On The Road to Valhalla"#post#java‑next #impulse #project‑valhalla #generics #primitive‑classesA summary of Brian Goetz' talk "Adventures On The Road to Valhalla" given at JVMLS in August 2015. Focused on generic specialization and the two prototypes.2015-08-14All About Project Jigsaw On InfoQ#post#java‑next #java‑9 #project‑jigsawMy posts about Project Jigsaw got polished and published on InfoQ.2015-08-04Thoughts On Comments#post#clean‑code #clean‑comments #documentationMy rant to comment your fucking code sparked some interesting conversations. Here we discuss some of your and my thoughts on the topic of comments.2015-07-31Comment Your Fucking Code!#post#clean‑code #clean‑comments #documentation #rantYou think your code is so clean that it doesn't need comments? Then this rant is just for you!2015-07-15Casting In Java 8 (And Beyond?)#post#java‑8 #optional #streamsProposal to implement new casting methods on Java's Class. They aim to fulfill the need for improved ways to cast which was created by Java 8.2015-07-06The Features Project Jigsaw Brings To Java 9#post#java‑next #java‑9 #project‑jigsawA detailed presentation of the features Project Jigsaw brings to Java 9: modularization, encapsulation, configuration, performance, and more.2015-06-30Motivation And Goals Of Project Jigsaw#post#java‑next #java‑9 #project‑jigsawA look at how Project Jigsaw (coming in Java 9) aims to solve JAR/classpath hell and at its goals to improve security, maintainability and performance.2015-06-18LibFX 0.3.0 Released#post#libfxRelease post for LibFX 0.3.0 including pointers to GitHub, feature descriptions, Maven coordinates and the Javadoc.2015-05-28Transforming Collections#post#collections #libfxTransforming collections are a view onto another collection, making it appear to be of a different parametric type. They are available in LibFX 0.3.0.2015-05-26JavaFX, Project Jigsaw and JEP 253#post#java‑next #java‑9 #javafx #project‑jigsaw #patternsJEP253 aims to prepare JavaFX for Project Jigsaw by defining public APIs for functionality that will become inaccessible due to modularization.2015-05-18First Release of JDeps Maven Plugin#post#java‑9 #jdeps #tools #project‑jigsawThe JDeps Maven Plugin will break a project's build if it contains dependencies on JDK-internal APIs. This helps to prepare for Java 9.2015-05-11Impulse: "Crafted Design"#post#architecture #impulseSummary of the architecture described by Sandro Mancuso in his talk "Crafted Design", held at GeeCON2014.2015-05-06LibFX 0.2.1 Released#post#libfxRelease post for LibFX 0.2.1 including pointers to GitHub, feature descriptions, Maven coordinates and the Javadoc.2015-05-02How Java 9 And Project Jigsaw May Break Your Code#post#java‑next #java‑9 #project‑jigsaw #deprecation #migrationWith Java 9 comes Project Jigsaw - a modularization of the JDK - which will break existing code. An overview over the planned changes lets you see whether yours is affected.2015-04-27Getting Rid Of Anonymous Classes#post#java‑8 #lambda #techniquesAnonymous classes are verbose and obfuscating. Functional implementations can oust them from their last strongholds (mainly abstract classes).2015-04-17Interface Evolution With Default Methods – Part II: Interfaces#post#default‑methods #generics #java‑8Why interface evolution with default methods does not work for whole interfaces - at least not smooth enough to be practical.2015-04-10Impulse: "Agile Architecture"#post#agile #architecture #impulseA summary of the talk "Agile Architecture" given by Molly Dishman and Martin Fowler as the keynote at the O'Reilly Software Architecture Conference.2015-03-26Roll Your Own Pirate-Elvis Operator#post#java‑8 #lambda #optionalJava has no Elvis operator (or null coalescing operator / null-safe member selection) but with lambda expressions / method references you can roll your own.2015-03-16Test Collection Implementations with Guava#post#collections #libraries #testingHere's how to use Guava-Testlib to easily and thoroughly test your own Java collection implementations.2015-03-09Interface Evolution With Default Methods - Part I: Methods#post#default‑methods #java‑8 #patternsPatterns for interface evolution with default methods: gradually add, replace and remove interface methods without breaking client code.2015-02-26Value-Based Classes#post#java‑8 #java‑next #project‑valhalla #primitive‑classesAn explanation of value-based classes in Java 8. Why do they exist? What are their limitations? How (not) to use them?2015-02-15Running Android Emulator With HAXM On Thinkpad T440p#post#toolsQuick guide to how to use the Android emulator with HAXM (based on VT-x) on a Thinkpad T440p.2015-01-26Everything You Need To Know About Default Methods#post#default‑methods #java‑8 #java‑basicsCovering literally everything there is to know about Java 8's default methods.2015-01-15New Javadoc Tags @apiNote, @implSpec, and @implNote#post#java‑8 #toolsThere are new Javadoc tags used in Java 8: @apiNote, @implSpec, and @implNote. Take a look at their history, meaning and use on command line and with Maven.2015-01-07Hello 2015!#post#turn‑of-the-yearI'm laying out my new year's resolutions for 2015.2015-01-01Goodbye 2014!#post#turn‑of-the-yearI'm taking a look at my open source contributions and blogging achievements in 2014.2014-12-31Instances of Non-Capturing Lambdas#post#default‑methods #java‑8 #lambdaSee how Java's creation of instances of non-capturing lambda expressions can lead to unexpected and possibly bug-inducing behavior.2014-12-08Multiple Return Statements#post#clean‑code #java‑basicsAn argument for using multiple return statements in a method (as opposed to adhering to the single return myth).2014-12-03Don't Remove Listeners - Use ListenerHandles#post#clean‑code #javafx #libfxKeeping references around to remove listeners is a hazard. ListenerHandles encapsulate the complexity and LibFX has an implementation.2014-11-28LibFX 0.2.0 Released#post#javafx #libfxRelease post for LibFX 0.2.0 including and pointers to GitHub, Feature descriptions, Maven coordinates and the Javadoc.2014-11-23JavaFX Sources in Eclipse#post#tools #javafxA quick step by step guide how to use the JavaFX sources in Eclipse by attaching them to the current JDK.2014-11-13Impulse: "Lambdas In Java: A Peek Under The Hood"#post#java‑next #impulse #java‑8 #lambdaDiscussing the talk "Lambdas in Java: A peek under the hood" given by Brian Goetz at the goto; conference 2013 in Aarhus.2014-11-09Serialize Optional#post#java‑8 #optional #serializationA summary of why you can't serialize Optional and what can be done to deal with that limitation if necessary.2014-11-02The Serialization Proxy Pattern#post#clean‑code #patterns #serializationA presentation of the Serialization Proxy Pattern as defined in Effective Java. It defines the pattern, describes its implementation and gives examples.2014-10-29Concepts of Serialization#post#java‑basics #serializationA close look at serialization and a presentation of some key concepts of Java's serialization system.2014-10-26Why Isn't Optional Serializable?#post#java‑next #java‑8 #optional #serialization #primitive‑classesDiscussing the reasons for not making Java 8's new type Optional serializable.2014-10-22The Design of Optional#post#java‑next #java‑8 #optionalA digest of how Optional was introduced in Java 8, summarizing the many discussions about it and their key points based on the mail archive of JSR-335.2014-10-18Intention Revealing Code With Optional#post#clean‑code #java‑8 #optionalWrite intention revealing code with Java 8's new type Optional and prevent most NPEs. This is not optional!2014-10-07Impulse: "Architecture - The Lost Years"#post#architecture #impulseDiscussing the talk "Architecture - The Lost Years", which Robert C. Martin held on several occasions.2014-10-04The Decorator Pattern With Default Methods#post#clean‑code #patterns #default‑methods #java‑8Use Java 8's default methods to make the decorator pattern even more beautiful, which results in more concise and readable code.2014-09-30Impulse: "Workflows of Refactoring"#post#impulse #techniquesDiscussing the keynote "Workflows of Refactoring" by Martin Fowler at OOP 2014, where he categorizes different reasons for and ways of refactoring.2014-09-25How The Decorator Pattern Saved My Day#post#clean‑code #patternsA real-life example how the decorator pattern enables future changes and improves code quality by upholding the Single Responsibility Principle.2014-09-22CodeFX Up And Running#post#metaSummer recess is officially over and shit got done! Finally, CodeFX is ready to take on the world.2014-09-17LibFX 0.1.1 Released#post#javafx #libfxRelease post for LibFX 0.1.1 including a description of Nestings and pointers to GitHub, Maven and the Javadoc.2014-09-14Foobar#post#meta #techniques #record‑argsA foobar post that may accidentally teach you about Foobar.2014-06-27