With Lombok
01 import lombok.Getter;
02
03 public class GetterLazyExample {
04 @Getter(lazy=true) private final double[] cached = expensive();
05
06 private double[] expensive() {
07 double[] result = new double[1000000];
08 for (int i = 0; i < result.length; i++) {
09 result[i] = Math.asin(i);
10 }
11 return result;
12 }
13 }
Vanilla Java
01 public class GetterLazyExample {
02 private double[] $lombok$lazy1v;
03 private volatile boolean $lombok$lazy1i;
04 private final Object $lombok$lazyLock = new Object[0];
05
06 public double[] getCached() {
07 if (!this.$lombok$lazy1i) {
08 synchronized (this.$lombok$lazyLock) {
09 if (!this.$lombok$lazy1i) {
10 this.$lombok$lazy1v = expensive();
11 this.$lombok$lazy1i = true;
12 }
13 }
14 }
15 return this.$lombok$lazy1v;
16 }
17
18 private double[] expensive() {
19 double[] result = new double[1000000];
20 for (int i = 0; i < result.length; i++) {
21 result[i] = Math.asin(i);
22 }
23 return result;
24 }
25 }