Java 无法从对象转换为错误和关于指针的查询

Java 无法从对象转换为错误和关于指针的查询,java,object,linked-list,converter,Java,Object,Linked List,Converter,我想首先概述一下我正在使用的类,同时构造一个包含双链接列表的类,我没有使用Java内置类: class Node { //Forms the nodes of the list private Object element; private Node next; private Node prev; //....other methods etc. } public class mylist implements Iterabl

我想首先概述一下我正在使用的类,同时构造一个包含双链接列表的类,我没有使用Java内置类:

    class Node { //Forms the nodes of the list
        private Object element;
        private Node next;
        private Node prev;  //....other methods etc.
}

    public class mylist implements Iterable<Node> {
     Node head; Node tail; //....
    @Override
        public Iterator<Node> iterator() {
            return new myit(this);
        }
    public class myit implements Iterator<Node> {       
            mylist set; 
            Node curr;
            myit(mylist input) {
                set=input;
                curr=set.head;
            }
            @Override
                public boolean hasNext() {
                    return (!(curr.getNext()==set.tail));
                }
            @Override
            public Node next() {
                if (this.hasNext()) return curr.getNext();
            }

        }



    public class Myset {
            mylist set;
            //...
public void Delete(Object o) {

        for(Node p: this.set) {
            if(p.getElement().equals(o)) {
            Node q=p.getNext();
            p.getPrev().setNext(q);
            q.setPrev(p);
            break;
        }}
    }
    public static void main(String[] as) {
            Myset m=new Myset();
            for(int i=1; i<5;i++) {
                m.Insert(new Card(i));
            }
            for(Node n: m.set){
                Card x=n.getElement(); //ERROR HERE
                System.out.println(x.number());
            }}
需要明确的是,这里的所有类都是在单独的文件中定义的。Card是我创建的一个单独的类。我得到一个错误,表示类型不匹配:无法在指定行中从对象转换为卡。我如何克服这个问题? 另外,您可能已经注意到,我已经重载了迭代器函数,以便使用中建议的方法将其用于我的链表类。如果您发现问题/有任何建议,我将不胜感激。
我还有一个关于Myset中Delete方法的问题。由于上面的错误,我还不能运行代码,但是我对此表示怀疑。我对Java相当陌生,我习惯于使用C语言中的指针。那么p和q是否充当mylist中原始节点的内存位置的“指针”,这会成功删除节点

正如评论中所建议的,一个简单快捷的解决方案是简单地将getElement的返回值强制转换为Card:


编译器不知道您只在列表中存储卡片对象,因为它可以保存对象的任何子类或对象本身。在您的情况下,作为程序员,您必须告诉编译器您正在做什么-如果您100%确定列表将只包含卡片对象,您可以安全地将返回值转换为卡片。

如何克服这一问题?你可以了解。或者你去老派学校投下价值观。节点。。T elementNode.getElement返回对象。您正在尝试将返回的对象分配给Card类型的变量。因此编译器不同意:它不能确定对象是一张卡片。因此您需要强制转换:Card x=Card n.getElement;。您的代码非常缩进,变量名非常糟糕,这使得您的代码很难阅读,即使对您来说也是如此。如果您正确地格式化了自己的代码并选择了好的名称,那么您会对自己的代码有更好的了解。方法以小写字母开头。课程以大写字母开头。用的是骆驼皮箱,非常感谢。这就解决了问题。我对格式设置感到非常抱歉,我粘贴了它,并将其转换为代码片段,我意识到至少可以说它看起来非常混乱。
Card x = (Card) n.getElement();