Если конструктор SomeObject выполняет дорогостоящую работу, такую как извлечение чего-либо из базы данных, анализ чего-либо или чтение чего-либо из файла, то клону имеет смысл избегать выполнения этой работы.
Если конструктор ничего не делает, тогда действительно нет необходимости использовать клон.
Редактировать: добавлен код, показывающий, что клон не должен выполнять ту же работу, что и конструктор:
class Main
implements Cloneable
{
private final double pi;
public Main()
{
System.out.println("in Main");
// compute pi to 1,000,000,000 decimal palaces
pi = 3.14f;
}
public Object clone()
{
try
{
return (super.clone());
}
catch(final CloneNotSupportedException ex)
{
throw new Error(); // would not throw this in real code
}
}
public String toString()
{
return (Double.toString(pi));
}
public static void main(String[] args)
{
final Main a;
final Main b;
a = new Main();
b = (Main)a.clone();
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
Главный конструктор вызывается один раз, вычисление пи выполняется один раз.