Clone () in Java

7
%Vor%

Warum funktioniert dieses einfache Testprogramm nicht?

    
user1192813 06.02.2012, 17:09
quelle

6 Antworten

19

clone ist eine Methode der Object-Klasse. Damit eine Klasse "klonbar" ist, sollte sie den Marker Cloneable interface implementieren. String class implementiert diese Schnittstelle nicht und überschreibt nicht die Klonmethode, daher der Fehler.

Ich hoffe, das obige Snippet dient Bildungszwecken, denn Sie sollten niemals clone auf Zeichenketten in Java aufrufen müssen, vorausgesetzt:

  1. Strings in Java sind unveränderlich. Fühlen Sie sich frei, sie über Methoden / Klassen
  2. zu teilen
  3. Es existiert bereits ein Konstruktor new String(String) , der wie ein Kopierkonstruktor wirkt und dem Aufruf clone() entspricht.
Sanjay T. Sharma 06.02.2012 17:11
quelle
6

Object.clone() ist geschützt. Es ist eine knifflige API zu verwenden.

Normalerweise macht man clone() verfügbar, wenn man Object erweitert, indem man die Sichtbarkeit der Methode erweitert.

Clone für einen String hat wenig Bedeutung, da es sowohl final als auch unveränderlich ist.

Es gibt einen Grund, eine Zeichenfolge zu kopieren. das kann gemacht werden mit:

%Vor%     
Dilum Ranatunga 06.02.2012 17:11
quelle
1

clone () ist eine geschützte Methode für die Object-Klasse. Wenn Sie möchten, dass eine Klasse klonbar ist, sollten Sie Cloneable und mache diese Methode öffentlich.

    
ggreiner 06.02.2012 17:12
quelle
1

Es konnte offensichtlich nicht kompiliert werden. Object.clone hat geschützten Zugriff.

  

Darüber hinaus ist es innerhalb der Klasse selbst zugänglich und innerhalb der   selbe Paket ..., ein geschütztes Mitglied kann auch von a erreicht werden   Klasse durch Objektreferenzen, die mindestens vom selben Typ sind wie   die Klasse

    
user381105 06.02.2012 17:13
quelle
1

Die java.lang.Cloneable-Schnittstelle muss von der Klasse implementiert werden, deren Objektklon wir erstellen möchten. Wenn wir die Schnittstelle Cloneable nicht implementieren , generiert clone () CloneNotSupportedException .

Die clone () -Methode ist in der Object-Klasse definiert. Die Syntax der clone () -Methode lautet wie folgt:

%Vor%     
Seeker 05.07.2015 09:04
quelle
0

Damit eine Klasse "klonbar" ist, sollte sie die Cloneable-Schnittstelle implementieren. Die String-Klasse implementiert diese Schnittstelle nicht und überschreibt nicht die Klon-Methode, daher der Fehler.

protected Object clone () gibt CloneNotSupportedException aus und gibt die exakte Kopie (Klon) dieses Objekts zurück.

Strings in Java sind unveränderlich. Fühlen Sie sich frei, sie über Methoden / Klassen zu teilen Es gibt bereits einen Konstruktor new String (String), der wie ein Kopierkonstruktor funktioniert und dem Aufruf clone () ziemlich ähnlich ist.

Gewöhnlich macht man clone () verfügbar, wenn man Object erweitert, indem man die Sichtbarkeit der Methode erweitert.

Klonen auf eine beliebige Zeichenfolge hat wenig Bedeutung, da sie sowohl endgültig als auch unveränderlich ist.

    
VicXj 28.06.2016 10:36
quelle

Tags und Links