| 68 | 1 package fschmidt.util.java; | 
|  | 2 | 
|  | 3 import java.util.concurrent.Callable; | 
|  | 4 import java.util.concurrent.ExecutionException; | 
|  | 5 | 
|  | 6 | 
|  | 7 public abstract class FutureValue<V> { | 
|  | 8 | 
|  | 9 	private final FastFuture<V> ft = new FastFuture<V>(new Callable<V>() { | 
|  | 10 		public V call() throws Exception { | 
|  | 11 			return compute(); | 
|  | 12 		} | 
|  | 13 	}); | 
|  | 14 | 
|  | 15 	public V get() throws ComputationException { | 
|  | 16 		ft.run(); | 
|  | 17 		try { | 
|  | 18 			return ft.get(); | 
|  | 19 		} catch(InterruptedException e) { | 
|  | 20 			throw new ComputationException(e); | 
|  | 21 		} catch(ExecutionException e) { | 
|  | 22 			throw ComputationException.newInstance(e); | 
|  | 23 		} | 
|  | 24 	} | 
|  | 25 | 
|  | 26 	protected abstract V compute() throws Exception; | 
|  | 27 } |