打扰一下,这个 Java 代码为什么报空指针错误啊,实现深 clone

2020-11-16 19:07:09 +08:00
 proxytoworld

代码:

package deepcopy;

public class DeepCopy {
    static class Body implements Cloneable {
        public Head head;

        public Body() {
        }

        public Body(Head head) {
            this.head = head;
        }
        //重写 clone 方法
        @Override
        protected Object clone() throws CloneNotSupportedException {
            Body newBody = (Body) super.clone();
            newBody.head = (Head) head.clone();
            return newBody;
        }
    }

    static class Head implements Cloneable {
        public Face faces;

        public Head() {
        }

        public Head(Face face) {
            this.faces = face;
        }
        //重写 clone 方法
        @Override
        protected Object clone() throws CloneNotSupportedException {
            Head head = (Head) super.clone();
            head.faces = (Face)this.faces.clone();
            return head;
        }
    }

    static class Face implements Cloneable{
        //重写 clone 方法
        @Override
        protected Object clone() throws CloneNotSupportedException{
            return super.clone();
        }
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        Body body = new Body(new Head());
        Body body1 = (Body) body.clone();
        System.out.println(body == body1);
        System.out.println(body.head == body1.head);
        System.out.println(body.head.faces == body1.head.faces);
        System.out.println(body.head);
        System.out.println(body1.head);
    }
}
513 次点击
所在节点    问与答
1 条回复
lwlizhe
2020-11-16 19:27:19 +08:00
额,不知道是不是全部代码……

不过我感觉这种空指针应该是最简单的错误了哈……这种问题自己看下报错信息……我感觉这种问题没多大意义……

回正题

乍看应该是 head 中 face 为空导致的,跟拷不拷贝好像没什么关系,body.clone 调用了 head.clone,head.clone 调用了 face.clone,然而 face 是空的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/725915

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX