In most cases, overloading is the preferred approach because it offers superior run-time performance as well as better type checking. In addition, overloading avoids the need to wrap integer arguments inside an Integer object.
However, declaring the parameter as type Object can be useful in cases where there is more than one polymorphic parameter. You might also choose this method when you want to access a service that acts generically on a wide variety of types, such as a function that can accept any object declared with the @dll.struct directive.