I would choose the first one, since it allows you to either modify the transferred object, or return it, or take a copy of the object and return a copy.
public Obj populate(Obj o) { Obj returnObj = o.clone(); .... return returnObj; }
This allows you to save the link to the source object and refer to the modified object.
source share