Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "Java15/Examples"
Line 40: | Line 40: | ||
|15 is shown in the drop down list. | |15 is shown in the drop down list. | ||
A checkbox to enable preview features is available on the preference page. | A checkbox to enable preview features is available on the preference page. | ||
+ | |- | ||
+ | ! scope="row" | Overview of eclipse.ini | ||
+ | | More details can be found on dedicated [https://wiki.eclipse.org/Eclipse.ini eclipse.ini] page. | ||
+ | |Specifying the JVM in eclipse.ini | ||
|- | |- | ||
! colspan="3" | Standard Feature: Text Blocks. | ! colspan="3" | Standard Feature: Text Blocks. |
Revision as of 07:47, 19 August 2020
This is an informal page listing examples of features that are implemented by the Java 15 Support, which can be installed from the Marketplace. You are welcome to try out these examples. If you find bugs, please file a bug after checking for a duplicate entry here
Watch out for additional examples being added soon.
NOTE:
- TextBlock is standard features in Java 15.
- Records is also another preview feature in Java 15. They are not enabled by default and can by enabled using --enable-preview.
- Instanceof Pattern Matching is also another preview feature in Java 15. They are not enabled by default and can by enabled using --enable-preview.
- In Eclipse, --enable-preview can be enabled from the Preferences. It is implicitly added while launching a java program if the feature has been enabled for the project/workspace.
Feature / Steps | Expected Result | |
---|---|---|
The Pre-requisite: Java 15 JRE Support | ||
Add Java 15 JRE | Use Window -> Preferences-> Java -> Installed JREs -> Add...
|
Java 15 JRE recognized as a valid JRE |
Project JRE | In Package Explorer Use project's context menu and add Java 15 JRE | JRE specific (eg Object) gets resolved in the project. |
Package Explorer | Go to Package Explorer and expand the Java 15 JRE | Modules (eg java.base etc) are listed in the package explorer view |
The First Step: Java 15 Compliance | ||
Set Project Compliance in Package Explorer | Context Menu of Project -> Properties -> Set project-specific, drop down to 15 | 15 is shown in the drop down list.
A checkbox to enable preview features is available on the preference page. |
Overview of eclipse.ini | More details can be found on dedicated eclipse.ini page. | Specifying the JVM in eclipse.ini |
Standard Feature: Text Blocks. | ||
Text Block Example | Compile and run the following code:
public class Test { public static void main(String[] args) { String tb = """ Hello World """; System.out.println(tb); } } |
Code compiles and prints both "Hello" "World" as it is - notice that "World" is printed in the next line. |
Text Block Compilation Error Example | Use the following code:
public class Test { public static void main(String[] args) { String tb = """ Hello World ""; } } |
Compilation error - text block not closed properly |
Preview Feature: Records | ||
Postive compilation1 (Record Example) | Compile and run the following code:
@SuppressWarnings("preview") record Point(int x, int y) { } public class X1 { public static void main(String[] args) { Point p = new Point(100, 200); System.out.println(p.x()); } } |
Code compiles and prints 100. |
Positive compilation2 (Nested Record Example) | Compile and run the following code:
class X2 { public static void main(String[] args) { System.out.println(0); } @SuppressWarnings("preview") record Point(int x, int y) { } } |
Code compiles and prints 0. |
Positive compilation3 (Record Example) | Compile and run the following code:
class X3 { public static void main(String[] args) { System.out.println(0); } } @SuppressWarnings("preview") final record Point(int x, int y) { } |
Code compiles and prints 0. Though a record declaration is implicitly final, it is permitted for the declaration of a record type to redundantly specify the final modifier |
Positive compilation4 | Compile and run the following code:
@SuppressWarnings("preview") record R() { } class X4 { public static void main(String[] args) { System.out.println(new R().hashCode()); } } |
Code compiles and prints 0. |
Positive compilation5 | Compile and run the following code:
import java.lang.annotation.Target; import java.lang.annotation.ElementType; @Target({ ElementType.PARAMETER }) @interface MyAnnot { } @SuppressWarnings("preview") record R(@MyAnnot()int i, int j) { } class X5 { public static void main(String[] args) { System.out.println(new R(100, 200).hashCode() != 0); } } |
Code compiles and prints true. |
Positive compilation6 | Compile and run the following code:
class X6 { @SuppressWarnings("preview") public static void main(String[] args) { record R(int x,int y){} R r = new R(100, 200); System.out.println(r.x()); } } |
Code compiles and prints 100. |
Negative compilation1 (Record Example) | Compile and run the following code:
@SuppressWarnings("preview") abstract record Point(int x, int y){ } class X7 { public static void main(String[] args){ System.out.println(0); } } |
Code fails to compile with error "Illegal modifier for the record Point; only public, final and strictfp are permitted" |
Negative compilation2 (Record Example) | Compile and run the following code:
@SuppressWarnings("preview") record Point1(int myInt, char myChar) implements I { public Point1 { this.myInt = myInt; this.myChar = myChar; } } public class X8 { public static void main(String[] args) { System.out.println(0); } } interface I { } |
Code fails to compile with error "The canonical constructor Point1 of a record declaration must be declared public." |
Negative compilation3 (Record Example) | Compile and run the following code:
class record { public static void main(String[] args) { System.out.println(0); } } |
Code fails to compile with error "Record is a restricted identifier and hence not a valid type name" |
Record Creation Wizard | Right Click on the Project -> New -> Record or Right Click on the Project -> New -> Other and search for Record or Right Click on the Project -> New -> Other -> Java -> Record
|
Record is created |
Preview Feature: Instanceof Pattern Matching | ||
Instanceof Pattern Matching Example | Use the following code:
@SuppressWarnings("preview") public class X { public boolean isBlank(Object o) { return (o instanceof String s) && s.isBlank(); } } |
The pattern variable 's' is in current scope |
Instanceof Pattern Matching Example | Use the following code:
@SuppressWarnings("preview") public class X { public int size(Object obj) { if (obj instanceof String s) { return s.le } return -1; } } |
The pattern variable 's' is in current scope inside 'then' statement and completion proposes applicable methods on String, the pattern matched type. |
Instanceof Pattern Matching Example | Use the following code:
package p; @SuppressWarnings("preview") public class X { public int size(Object obj) { if (obj instanceof String s) { return s.length(); } return s.length(); // s not in scope } } |
The pattern variable 's' is rejected by the compiler when not in scope outside the 'then' statement. |