both params should be final.  Should checkNotNull on assignment for sanity