Java 11 is the target Java version for Apache Ignite 3 development. The project's Java code style is based on Google Java Style Guide. But Apache Ignite community could introduce additional rules in order to address some issues, contradictions, etc.
All rules, listed in this document, supplement or override the rules of the Google Java Style Guide.
These rules supplement section 4.8.5 of Google Java Style Guide.
Ignite 3 uses JetBrains nullability annotations. For the sake of code clarity it is prohibited to use @NotNull
annotation, even if it compromises the completeness of static analysis. However, it is required to use @Nullable
in the following places:
null
;null
as this parameter will not end in throwing an exception;null
.There are multiple ways to annotate a Java array, which lead to different interpretation by the static analysis tool:
@Nullable Object[] x; // x array can *contain* null values Object @Nullable [] x; // x itself can be null @Nullable Object @Nullable [] x; // x array can contain null values *and* be null itself
It is recommended to enable all inspections, related to this topic. Please note, that all nested options should also be enabled:
All these options will be set automatically, when importing inspections settings from the repository.
var
keywordThe local variable type inference is the powerful feature of Java language. Nevertheless, one of the main goals of the code style guide is to ensure readability for developers, not for the compiler.
Based on this statement there are limited uses cases where var
keyword is allowed. The var
keyword is allowed only in cases where a right part of an assignment expression contains an explicit type of variable, that is for assignments of literals and the result of constructor invocation.
Allowed only for assignments of literals and result of constructor invocation:
var i = 42; var l = 42L; var s = "Hello"; var list = new ArrayList<Integer>();
Disallowed for all other cases:
var i = Integer.parseInt("42"); var s = "Hello".substring(0, 3); var list = Arrays.asList(1, 2, 3); var map = getMapping(); // some method invocation var val = map.get(42);