“字符串无法转换为PubliclyClonable”Java问题

“字符串无法转换为PubliclyClonable”Java问题,java,Java,因此,我试图向双链接列表中添加一些字符串,但我一直得到一个错误,即字符串无法转换为PubliclyClonable—一个扩展Cloneable的接口,用于创建克隆和复制构造函数,这是我教科书中的解释。下面是我的演示代码: public static void main(String[] args) { DoublyLinkedList list1 = new DoublyLinkedList(); DoublyLinkedList.DoublyLinkedIterator i

因此,我试图向双链接列表中添加一些字符串,但我一直得到一个错误,即字符串无法转换为PubliclyClonable—一个扩展Cloneable的接口,用于创建克隆和复制构造函数,这是我教科书中的解释。下面是我的演示代码:

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("");
以下是类DoublyLink列表的开始部分:

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;
    }
}

所以这里可能有我忽略的东西,但我试图实现的是可能的吗?是否有某种类型的类型转换或类型分配可以将这三个字符串添加到我的列表中?

您正在尝试将字符串添加到您声明将保持PubliclyClonable的列表中。将PubliclyClonable对象放入其中或声明它将包含字符串。

您的addToStart方法接受类型为T的参数,其中T由类定义为T扩展PubliclyClonable

由于java.lang.String未实现PubliclyClonable,因此它不能是DoublyLink列表的参数类型。如果您想要一个主函数来测试您的类,我将实现一个简单的愚蠢的PubliclyClonableString类:

由于DoublyLinkedList需要一个扩展PubliclyClonable的类,因此必须使自定义字符串类:

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);
    }

}
public interface PubliclyCloneable extends Cloneable
{
public Object clone();
}
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.
}
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);
    }

}