«Строка не может быть преобразована в PubliclyCloneable» Проблема с Java

1

Поэтому я пытаюсь добавить несколько строк в список с двойной привязкой, но я продолжаю получать ошибку, которую String не может преобразовать в PubliclyCloneable (интерфейс, расширяющий Cloneable, используется для создания клонирования() и конструктора копирования, a la мое объяснение учебника). Вот как выглядит мой демо-код:

public static void main(String[] args) 
{
    DoublyLinkedList list1 = new DoublyLinkedList();
    DoublyLinkedList.DoublyLinkedIterator i = list1.iterator();

    String pittsburgh1 = new String("Penguins");
    String pittsburgh2 = new String("Pirates");
    String pittsburgh3 = new String("Steelers");

    list1.addToStart(pittsburgh1);
    list1.addToStart(pittsburgh2);
    list1.addToStart(pittsburgh3);

    System.out.println("List contains:");
    i.restart();
    while (i.hasNext())
        System.out.println(i.next());
    System.out.println("");

Вот начальная часть класса DoublyLinkedList:

public class DoublyLinkedList<T extends PubliclyCloneable> implements PubliclyCloneable
{
private class TwoWayNode<T>
{
    private T data;
    private TwoWayNode<T> next;
    private TwoWayNode<T> prev;

    public TwoWayNode()
    {
        data = null;
        next = null;
        prev = null;
    }

    public TwoWayNode(T newData, TwoWayNode<T> prevNode, TwoWayNode<T> nextNode)
    {
        data = newData;
        next = nextNode;
        prev = prevNode;
    }
}

Вот метод, вызывающий ошибку компилятора:

public void addToStart(T itemData)
{
    TwoWayNode<T> newHead = new TwoWayNode(itemData, null, head);
    if (head != null)
    {
        head.prev = newHead;
    }
    head = newHead;
}

И вот интерфейс, который я использую:

public interface PubliclyCloneable extends Cloneable
{
public Object clone();
}

Таким образом, возможно, что-то, что я здесь не замечаю, но чего я пытаюсь сделать даже возможным? Есть ли какой-то тип или тип присваивания, который я могу сделать, чтобы добавить эти три строки в мой список?

Теги:

3 ответа

0
Лучший ответ

Ваш метод addToStart принимает аргумент типа T, где T определяется классом как T extends PubliclyCloneable.

Поскольку java.lang.String не реализует PubliclyCloneable, он не может быть типом аргумента для вашего DoublyLinkedList. Если вы хотите, чтобы main функция проверяла ваш класс, я бы выполнил простой-тупой класс PubliclyClonableString ::

public class PubliclyClonableString implements PubliclyClonable {
    private String s;
    public PubliclyClonableString (String s) {
        this.s = s;
    }

    @Override
    public String clone() {
        return s; // OK, since Strings are immutable
    }

    // getter, setter, etc.
}
0

Вы пытаетесь добавить Strings в список, который, как вы заявили, будет содержать PubliclyCloneable. Либо поставьте в него объекты PubliclyCloneable, либо объявите, что они будут содержать строки.

0

Поскольку DoublyLinkedList требует класс, который расширяет PubliclyCloneable, вам придется создать свой собственный класс строк:

public class CloneableString implements PubliclyCloneable {

    private String str;

    public CloneableString(String str) {
        this.str = str;
    }

    public String getString() {
        return str;
    }

    @Override
    public Object clone();
        return new CloneableString(str);
    }

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню