我有一个应用程序,它使用生成各种类型的对象和数据结构的代码,将它们作为 Object 实例返回,并且想要一种通用的方法来确定这些对象中的任何一个是否为“空”(或 null)。
(这不是设计问题,也不是是否应该使用这种方法的问题,而是针对现有需求优化解决方案的问题。)
所以,这是一个简单的开始:
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() 的 Collection?