さまざまなタイプのオブジェクトとデータ構造を生成し、それらを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であるかどうかを確認することもできます(実際には、リフレクションが多すぎる可能性がありますが、ここに含めます完全を期すために。)
isEmpty()を持つCollectionと同様に、上記の場合に含めるために、isEmpty()メソッドの代わりにlength()またはsize()メソッドを持つ非常に一般的に使用されるトップレベルクラスはありますか?