Вот мой подход, хотя класс PropertyUtil
нужен, но он записывается только один раз:
/**
* Generic method to encapsulate type casting and preventing nullPointers.
*
* @param <T> The Type expected from the result value.
* @param o The object to cast.
* @param typedDefault The default value, should be of Type T.
*
* @return Type casted o, of default.
*/
public static <T> T getOrDefault (Object o, T typedDefault) {
if (null == o) {
return typedDefault;
}
return (T) o;
}
Код клиента может сделать это:
PropertyUtil.getOrDefault(obj.getAttribute("someAttr"), "").equals("true");
или, для списка:
PropertyUtil.getOrDefault(
genericObjectMap.get(MY_LIST_KEY), Collections.EMPTY_LIST
).contains(element);
Или потребителю List, который бы отклонил Object:
consumeOnlyList(
PropertyUtil.getOrDefault(
enericObjectMap.get(MY_LIST_KEY), Collections.EMPTY_LIST
)
)
По умолчанию может использоваться шаблон нулевого объекта https://en.wikipedia.org/wiki/Null_Object_pattern