Java Operators

Java Control Statements

Object Oriented Programming

Java Built-in Classes

Java File Handling

Java Error & Exceptions

Java Multithreading

Java Synchronization

Java Networking

Java Collections

Java Interfaces

Java Data Structures

Java Collections Algorithms

Advanced Java

Java Miscellaneous

Java APIs & Frameworks

Java Class References

Java Useful Resources

Java - Warning for Value-Based Classes



Some classes, such as java.util.Optional and java.time.LocalDateTime, are value-based. Such Instances of a value-based class are final and immutable. Such classes have annotation @jdk.internal.ValueBased and Java 16 now generates compile time warnings in case such classes are synchronized using synchronized keyword. Wrapper classes are value based. For example, Double class is a value based.

Example

 package java.lang; @jdk.internal.ValueBased public final class Double extends Number implements Comparable<Double>, Constable, ConstantDesc { //... } 

Consider the following example:

ApiTester.java

Example

 public class APITester { public static void main(String[] args) { Double d = 10.0; synchronized (d) { System.out.println(d); } } } 

Compile and Run the program

 $javac APITester.java 

Output

 APITester.java:4: warning: [synchronization] attempt to synchronize on an instance of a value-based class synchronized (d) { ^ 1 warning 
Advertisements