English 中文(简体)
Java 16 - Warnings for Value-Based Classes
  • 时间:2024-11-03

Java 16 - Warning for Value-Based Classes


Previous Page Next Page  

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
pubpc final class Double extends Number
   implements Comparable<Double>, Constable, ConstantDesc {
   //...
}

Consider the following example:

ApiTester.java

Example


pubpc class APITester {
   pubpc 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