[2021 kcdc] Algebraic in Java: Pattern Matching

This post is my live blog from KCDC. For more, see the 2021 KCDC live blog TOC

Speaker: Chandra Guntur

Twitter: @cguntur



  • This is part two of a talk. Part 1 covered algebraic types (ex: enums). Don’t need to have seen it for this talk
  • Pattern matching came froM SNOBOL (string oriented and symbolic language) in 1960s
  • This presentation is in https://github.com/c-guntur/algebraic-in-java

Switch case pattern matching

  • case can be type of object. ex: case Integer i -> “int”
  • Must put “case null” in order to avoid a null pointer
  • Guarded expressions: case Integer i && i < 50
  • Can use same pattern variable name across case statements
  • Flow scoping

If statement pattern matching

Deconstructing is from JDK 18 preview – https://openjdk.java.net/jeps/405 (preview features can change)

  • if (o instanceof Point p)
  • if (o instanceof Point(int x, int y) – deconstruct value. Implicitly type safe because null won’t reach branch (null instanceof X is always false)
  • if (r instanceOf Rect(Point(var x, var y), var lr) – nested deconstruction
  • If have varargs, can match by coordinates/number of elements. Ex Point() matches no params, Point(var a) matches one, Point(var a, …) matches one or more
  • For array, if (o instanceof String[] { String s1, … } – one or more elements in array

Pattern matching isn’t new

  • Always had instanceof
  • Visitor pattern
  • Regular expressions

My take

I’m excited Java is going to be adding a lot of this. The format of presenting from inside IntelliJ is interesting. The presentation was short though. Only half an hour. I liked the answer to my question about scope – pretend there is an else block!

[kcdc 2021] Java 17’s Project Panama Newbies

This post is my live blog from KCDC. For more, see the 2021 KCDC live blog TOC

Speaker: Carl Dea (Azul)

Twitter: @carldea


Foojay.io has more

JEP 412 – Foreign Access API

  • https://openjdk.java.net/jeps/412 – ties together other JEPs
  • incubator module. Third incubabor
  • in making for at teast 6 years

Problems with old way

  • Communicating with required wrapper code and distributing a .ddl
  • Have to do a lo of work yourself to interfaces with C


  • jdk.java.net/panama
  • https://github.com/openjdk/panama-foreign
  • panama-dev@openjdk.java.net
  • https://foojay.io/today/project-panama-for-newbies-part-1/
  • https://foojay.io/today/project-panama-for-newbies-part-2/
  • https://foojay.io/today/project-panama-for-newbies-part-3/
  • https://github.com/carldea/panama4newbies


  • java -version. Make sure says 17-panama. (Not part of main JDK)
  • jextract -h to get help
  • jextract will generate Java code for you by looking at C header file
  • Most important options
    • -I (capital Eye) – include file path
    • -d – destination for generate files
    • -l (lowercase ell) – specify a library
    • -t – target package
  • Must add incubator module and enable native access flag to run
  • Can call C methods from Java by importing them
  • Java wil hande the memory allocation/cleanup based on scope


  • Copies file and puts in this file.
  • Not like import where it a reference

My take

This is a topic I knew nothing about. (Or forgot what I had known.) It was really cool to see!