2009-07-02 5 views
-3

Wenn ich einen Code habe, der die clone() -Methode hat, aber wie ich weiß, dass der doppelte Code hier schlecht ist (in dieser Anwendung z. B. bank Application), was soll ich tun ??? Die clone() -Methode ist in der BankOfAmerica, die IAccount implementiert (IAccount hat die clone() -Methode header!) Eine Person hat die clone() -Methode in der BankOfAmerica-Klasse überschrieben und ich möchte hier keinen doppelten Code erzeugen sollte ich mit dieser clone() -Methode machen.Was kann ich für die clone() -Methode tun?

Klon() Methode:

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

Warte was? hast du einen Code? Fragen Sie, ob die Klonmethode in Ordnung ist oder fragen Sie nach doppeltem Code? – Troggy

+0

Definitiv brauchen Sie etwas Klärung, was genau Sie fragen. – Aaron

+0

Bitte fügen Sie schlechten Code und eine Beschreibung dessen hinzu, was damit nicht stimmt. –

Antwort

1

Rückkehr 'super.clone()' als die Umsetzung von Klon ist fast als falsch garantiert. Wenn Sie bei clone ‚s javadoc anschauen, werden Sie sehen, dass die Erwartung ist, dass, wenn b ein Klon von a ist, dann in der Regel sollte folgendes wahr

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

sein Während diese nicht hart und schnell Regeln, und die Bedeutung Klon ist wirklich abhängig von der implementierenden Klasse, sollten Sie einen wirklich guten Grund haben, vorzugsweise gut dokumentiert, wenn Ihre Implementierung diese Erwartungen nicht erfüllt. Und im Allgemeinen wird jede Klonmethode, die super.clone() aufruft, um ihren Rückgabewert zu erstellen, den zweiten Test nicht bestehen.

+0

Ich würde vorschlagen, dass das richtige Muster dafür ist, dass Klon-Methoden zu object.clone dekonzentrieren, in welchem ​​Fall Klonierungs-Methoden, die super.clone aufrufen, das zweite Kriterium erfüllen. Leider verwenden viele Klonierungsmethoden einen Konstruktor, anstatt Object.Clone aufzurufen, und somit würde das Aufrufen von super.Clone mit solchen Objekten ein Objekt vom falschen Typ zurückgeben. – supercat

Verwandte Themen