2009-07-02 3 views
-3

Если у меня есть код, у которого есть метод clone(), но, как я знаю, здесь не так, что дубликат кода здесь (в приложении приложения e.g.bank), что мне делать ??? метод clone() находится в bankOfAmerica, который реализует IAccount (IAccount имеет заголовок метода clone()!) Один человек переопределяет метод clone() в классе bankOfAmerica, и я не хочу делать дубликат кода здесь. должен ли я работать с этим методом clone(). МетодЧто я могу сделать для метода clone()?

клон():

public IAccount clone() throws CloneNotSupportedException { 
     return (BankOfIranSavingsAccount) super.clone(); 
} 
+0

Подождите, пожалуйста, что? у вас есть код? Вы спрашиваете, подходит ли метод clone, или вы спрашиваете о дублирующем коде? – Troggy

+0

Определенно нужно уточнить, что именно вы спрашиваете. – Aaron

+0

Просьба включить код ошибки вместе с описанием того, что с ним не так. –

ответ

1

Возвращение 'super.clone()' как реализация клона почти гарантированно не так. Если вы посмотрите на Javadoc clone «s, вы увидите, что ожидается, что если б это клон, то следующий должен обычно быть истинным

a != b; 
a.getClass() == b.getClass(); 
a.equals(b); 

Хотя это не жесткие правила, и , то есть клона действительно зависит от класса реализации, у вас должна быть действительно веская причина, желательно хорошо документированная, если ваша реализация не соответствует этим ожиданиям. И вообще, любой метод clone, который вызывает super.clone() для создания возвращаемого значения, не сможет выполнить второй тест.

+0

Я бы предположил, что правильный шаблон для методов клонирования передается object.clone, и в этом случае методы клонирования, которые вызовут super.clone, будут соответствовать второму критерию. К сожалению, многие методы клонирования используют конструктор, а не вызов Object.Clone, и, таким образом, вызов super.Clone с такими объектами возвращает объект неправильного типа. – supercat