1 package cz.cuni.amis.utils; 2 3 /** 4 * Utility class for lazy initialization of objects. 5 * <p><p> 6 * THREAD-UNSAFE! 7 * 8 * @author ik 9 */ 10 public abstract class Lazy<T> { 11 12 protected T obj = null; 13 14 /** 15 * Creates lazy initialized object. 16 * @return 17 */ 18 abstract protected T create(); 19 20 /** 21 * @deprecated 22 * @return value created by {@link Lazy#create()} (UNSYNCHRONIZED CREATION!) 23 */ 24 public T getVal() { 25 if (obj == null) { 26 obj = create(); 27 } 28 return obj; 29 } 30 31 /** 32 * Synonym for {@link Lazy#getVal()}. 33 * @return 34 */ 35 public T get() { 36 return getVal(); 37 } 38 39 /** 40 * Sets value that should be returned via {@link Lazy#get()}. 41 * @param val 42 */ 43 public void set(T val) { 44 this.obj = val; 45 } 46 }