У меня есть приложение, которое использует код, который создает различные типы объектов и структуры данных, возвращая их как экземпляры экземпляра, и хотел бы, чтобы общий способ установить, является ли какой-либо из этих объектов «пустым» (или null).Java global isEmpty() метод
(Это не вопрос дизайна, или о том, следует ли использовать такой метод, но вопрос оптимизации решения существующей потребности.)
Итак, вот простой идти:
public static boolean isEmpty(Object content)
{
if (content == null)
{
return true;
}
else if (content instanceof CharSequence)
{
return (((CharSequence)content).length() == 0);
}
else if (content instanceof Collection<?>)
{
return ((Collection<?>)content).isEmpty();
}
else if (content instanceof Object[])
{
return (((Object[])content).length == 0);
}
else // Use reflection (an exaggeration, for demo purposes)
{
try
{
Method isEmpty = content.getClass().
getDeclaredMethod("isEmpty", (Class<?>[])null);
if (isEmpty != null)
{
Object result = isEmpty.invoke(content, (Object[])null);
if (result instanceof Boolean)
{
return (Boolean)result;
}
}
}
catch (Exception e)
{
}
}
return false;
}
Любые идеи для потенциальных улучшений с точки зрения производительности или покрытия?
Например, отражение может также использоваться для определения того, имеет ли объект метод length() или size(), вызывать его и видеть, равен ли результат 0. (В действительности отражение, вероятно, слишком много, но я включая его здесь для полноты.)
Есть ли класс верхнего уровня, который обычно используется, который имеет метод length() или size() вместо метода isEmpty() для включения в вышеуказанный случай, аналогично коллекции, которая имеет isEmpty()?
С первого взгляда * использование * такого метода само по себе кажется плохим дизайнерским решением. Как это будет использоваться? –
Используется для проверки «пустоты» объекта, возвращаемого не изменяемым методом, который создает множество различных типов данных. – PNS
Почему? Если вы вызываете этот метод, вы, вероятно, уже знаете, какой объект вы ему передаете, просто вызовите 'isEmpty' на самом объекте и избавите себя от этой проблемы. – Jeffrey