rendered paste bodyabstract class Cacheable { Object _cached; abstract Object retrieve(); Object get() { if (_object == null) _cached = retrieve(); return _cached;} }class CacheableA { A retrieve() { return retrieveA();} String retrieveA() { return "asdfasdf";} }class CachableB { B retrieve() { return retrieveB();} Integer retrieveB() { return new Integer(42);}}public class Foo { Cacheable _a = new CacheableA(); Cacheable _b = new CacheableB(); public String a() { return a.get(); } public Integer b() { return b.get(); }}