package com.revolsys.properties; public abstract class AbstractObjectPropertyProxy<T, O> implements ObjectPropertyProxy<T, O> { private transient T value; @Override public void clearValue() { this.value = null; } @Override public T getValue(final O object) { if (this.value == null) { synchronized (this) { if (this.value == null) { this.value = newValue(object); } } } return this.value; } public abstract T newValue(final O object); }