To future-proof, making source&target final. setSource and setTarget can then be removed. Can't see why anyone would want to use this directly.