Let those two small guidelines be here first:
- Let them in with the weakest type
- Let it out with the strongest type
Those two let the caller have as much flexibility as possible when calling a method based on them and also allow the method itself to be used in the widest range of the scenarios
Let the rest next time.