If you want to call one of many overloads of a single-argument method, but don't know the argument type until run-time, you can do it using reflection.
Here is a helper method for doing that:
private static void call(Object obj, String methodName, Object arg) {
    Class<?> argClass = arg.getClass();
    // Try simple approach
    Method methodToCall;
    try {
        methodToCall = obj.getClass().getMethod(methodName, argClass);
    } catch (@SuppressWarnings("unused") NoSuchMethodException unused) {
        methodToCall = null;
    }
    // Search for method, if simple approach didn't work
    if (methodToCall == null) {
        List<Method> candidates = new ArrayList<>();
        for (Method method : obj.getClass().getMethods()) { // Note: Public methods only
            if (method.getParameterCount() == 1 && method.getName().equals(methodName)) {
                Parameter parameter = method.getParameters()[0];
                if (parameter.getType().isAssignableFrom(argClass))
                    candidates.add(method);
            }
        }
        if (candidates.isEmpty()) {
            throw new NoSuchMethodError(obj.getClass().getName() + '.' +
                                        methodName + '(' + argClass.getName() + ')');
        }
        if (candidates.size() > 1) {
            // Implement extended overload resolution logic, if needed
            throw new NoSuchMethodError("Multiple candidates found for parameter type " +
                                        argClass.getName() + ": " + candidates);
        }
        methodToCall = candidates.get(0);
    }
    // Call method
    try {
        methodToCall.invoke(obj, arg);
    } catch (IllegalAccessException e) {
        throw new IllegalAccessError(e.getMessage());
    } catch (InvocationTargetException e) {
        throw new RuntimeException("Checked exception: " + e.getCause(), e);
    }
}
Test
public static void main(String[] args) {
    Test obj = new Test();
    for (Object arg : Arrays.asList("Foo", 42, 42L, 42f, 42d))
        call(obj, "myMethod", arg);
}
public void myMethod(String s) {
    System.out.println("String: " + s);
}
public void myMethod(Number s) {
    System.out.println("Number: " + s);
}
public void myMethod(Long s) {
    System.out.println("Long: " + s);
}
Output
String: Foo
Number: 42
Long: 42
Number: 42.0
Number: 42.0