首页 > 解决方案 > 在 Java 中访问 2 个对象相互引用时出错

问题描述

我创建了两个 POJO 类 Author 和 Book。其中 Author POJO 类需要 Book 作为参数,而 Book POJO 需要 Author 作为参数,即两者都是双向相关/循环相关的。

作者 Pojo 类:

Public class Author{
Private Book book;
Private String authorname;
publicIndividual(Book book, String authorname){
this.authorname=authorname;
this.book = book
}
// getters and setters…
}

预订pojo类:

Public class Book{
Private Author author;
Private String bookname;
Private String id;
publicIndividual(String id, String bookname, Author author){
this.id=id
this.bookname = bookname;
this.author = author
}
// getters and setters…
}

用于设置数据的 Java 类:

public final Author author = new Author(book, authorname);
public final Book book = new Book(id, bookname, author);

我正面临错误“非法前向引用”,因为在初始化之前尝试调用 book 方法。如何在相互依赖的 pojo 类中实现这种情况?

标签: javapojo

解决方案


主要是因为您有交叉引用,您可以在正确设置后使用 null 一个引用进行实例化。

public class TestRef
{
    public static void main(String args[])
    {
        Author author = new Author(new Book("1","bookname",null), "authorname");
        System.out.println(author+" Book.author::"+author.book.author);
        author.book.author=author;
        System.out.println(author+" Book.author::"+author.book.author);
    }
    static class Author{
        Book book;
        String authorname;
        public Author(Book book, String authorname)
        {
            this.authorname=authorname;
            this.book = book;
        }
        public String toString()
        {
            return "Author("+book+","+authorname+")";
        }
    }
    static class Book{
        Author author;
        String bookname;
        String id;
        public Book(String id, String bookname, Author author){
        this.id=id;
        this.bookname = bookname;
        this.author = author;
        }
        public String toString()
        {
            return bookname+"_"+id;
        }
    }   
}

输出

//with null ref on Book for Author
Author(bookname_1,authorname) Book.author::null
//after set up properly ref
Author(bookname_1,authorname) Book.author::Author(bookname_1,authorname)

推荐阅读