# Supported Java Features

{% hint style="warning" %}
**This is the manual for older MicroStream versions (Version < 5.0).**

**The new documentation (Version >= 5.0) is located at:**

[https://docs.microstream.one/](https://docs.microstream.one/manual)
{% endhint %}

| Feature                                                                             | Supported                                                                                                                                                                                                                                   | Note                                                                                                                                                                  |
| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Classes                                                                             | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          |                                                                                                                                                                       |
| Classes without default constructor                                                 | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          |                                                                                                                                                                       |
| Abstract classes / Interfaces                                                       | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          | Perfectly handleable as types, but there can never be instances to be persisted in the first place.                                                                   |
| Inner classes                                                                       | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          |                                                                                                                                                                       |
| Anonymous inner classes                                                             | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          |                                                                                                                                                                       |
| Primitives                                                                          | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          |                                                                                                                                                                       |
| References                                                                          | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          |                                                                                                                                                                       |
| Final fields                                                                        | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          |                                                                                                                                                                       |
| Static fields                                                                       | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UNsu-vJRarHfVpTgT%2Fremove-symbols%20\(2\).svg?alt=media\&token=90fb1b3f-80de-4774-a04e-2db052420533) | Not supported since they are outside of an entity graph / a database, i.e. potentially shared by multiple graphs.                                                     |
| Constant primitives                                                                 | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UNsu-vJRarHfVpTgT%2Fremove-symbols%20\(2\).svg?alt=media\&token=90fb1b3f-80de-4774-a04e-2db052420533) | No sense in persisting those. These are just plain trivial values outside of an entity graph / a database.                                                            |
| Constant instances                                                                  | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          | Must be registered for loading to update them instead of creating independent new instances.                                                                          |
| Primitive arrays                                                                    | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          |                                                                                                                                                                       |
| Object arrays                                                                       | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          |                                                                                                                                                                       |
| Multi dimensional arrays                                                            | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          | Technically the same as object arrays as every array is an object itself.                                                                                             |
| <p>JDK value types<br>(String, Number types, Date, File, Locale, Optional, ...)</p> | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          | Optimized handling via custom TypeHandlers.                                                                                                                           |
| Collections                                                                         | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          | <p>Via generic handling logic (List, Set, Map, etc.).<br>Optimal handling required tailored TypeHandler (e.g. correctly handling loadFactor in java.util.HashMap)</p> |
| Nested Collections                                                                  | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          |                                                                                                                                                                       |
| <p>JVM system-tied classes<br>(Thread, ClassLoader, WeakReference, ...)</p>         | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          | Technically handleable, but handling system-instances could cause fatal problems (e.g. start a Thread just from loading data), so it is intentionally disabled.       |
| <p>JVM external-tied classes<br>(IO-Streams, FileChannel, ...)</p>                  | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47)          | Technically handleable, but external dependencies could cause fatal problems (e.g. existence of a referenced file), so it is intentionally disabled.                  |

## Java 5

| Feature                    | Supported                                                                                                                                                                                                                          | Note                                                                                      |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| Enums                      | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47) | Automatically handled as constant instances to maintain referential integrity / identity. |
| Enums with mutable state   | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47) |                                                                                           |
| Enums anonymous subclasses | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47) |                                                                                           |

## Java 8

| Feature | Supported                                                                                                                                                                                                                                   | Note                                                                                            |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| Lambdas | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UNsu-vJRarHfVpTgT%2Fremove-symbols%20\(2\).svg?alt=media\&token=90fb1b3f-80de-4774-a04e-2db052420533) | Type-handleable in theory. But JVM is not able to resolve its own type definitions for lambdas. |

## Java 14

| Feature | Supported                                                                                                                                                                                                                          | Note                                       |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
| Records | ![](https://2778493744-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LlDABTSyLJZUmpSp2tl%2F-M4UJs8I4tU9bgxH7t50%2F-M4UMPdK-3oJ5AmvKngJ%2Fcheck-symbols.svg?alt=media\&token=c46941f4-266b-4260-8ca4-c82354adec47) | Records are mere syntax sugar for classes. |
