Клон () в Java - PullRequest
       21

Клон () в Java

7 голосов
/ 06 февраля 2012
import java.util.*;
import java.lang.*;

public class Test{
    public static void main(String[] argv){
        String s1="abc";
        String s2=(String) s1.clone();
    }    
}

Почему эта простая тестовая программа не работает?

Ответы [ 5 ]

20 голосов
/ 06 февраля 2012

clone - это метод класса Object. Чтобы класс был «клонируемым», он должен реализовывать интерфейс marker Cloneable. String класс не реализует этот интерфейс и не переопределяет метод clone, следовательно, ошибка.

Я надеюсь, что приведенный выше фрагмент предназначен для образовательных целей, потому что вам никогда не придется вызывать clone для строк в Java, учитывая, что:

  1. Строки в Java неизменны. Не стесняйтесь делиться ими между методами / классами
  2. Уже существует конструктор new String(String), который действует как конструктор копирования и в значительной степени эквивалентен вашему вызову clone().
6 голосов
/ 06 февраля 2012

Object.clone() защищено. Это сложный API для использования.

Обычно каждый выставляет clone(), когда расширяет Объект, расширяя видимость метода.

Клон на любой строке не имеет большого значения, так как она final и неизменна .

Есть причина скопировать строку; это можно сделать с помощью:

String s1 = ...;
String s2 = new String(s1)
1 голос
/ 06 февраля 2012

Это, очевидно, не может быть скомпилировано. Object.clone имеет защищенный доступ.

Помимо того, что он доступен внутри самого класса и кодируется внутри тот же пакет ..., защищенный член также может быть доступен из класс через ссылки на объекты, которые имеют как минимум того же типа , что и класс

1 голос
/ 06 февраля 2012

clone () - это защищенный метод класса Object.Если вы хотите, чтобы класс был клонируемым, общий шаблон должен реализовать Cloneable и сделать этот метод публичным.

0 голосов
/ 28 июня 2016

Чтобы класс был "клонируемым", он должен реализовывать интерфейс маркера Cloneable.Класс String не реализует этот интерфейс и не переопределяет метод clone, поэтому возникает ошибка.

Защищенный объект clone () throws CloneNotSupportedException создает и возвращает точную копию (клон) этогоobject.

Строки в Java являются неизменяемыми.Не стесняйтесь делиться ими между методами / классами. Уже существует конструктор new String (String), который действует как конструктор копирования и в значительной степени эквивалентен вашему вызову clone ().

Обычно один из них представляет clone (), когдаодин расширяет объект, расширяя видимость метода.

Клонирование в любой строке не имеет большого значения, поскольку оно является как конечным, так и неизменным.

...