If the object is a type we support but not the expected
type this should take care of converting that.
e.g. if we want to work with Integer on our map but our map
expects Strings then if the type is a Integer then we would return
optional empty if it is a type we don't expect to convert,
otherwise if we convert the type then an optional holding its new
value, when a non empty optional is returned a warning is logged.