湖心亭看雪 2014-10-07 14:06 采纳率: 0%
浏览 665

简单微博服务器端关联对象之间的关系处理

public class User{
private Integer id;
private String name;
private String password;
private String picture;
private String trueName;
private Integer age;
private Date lastLoginTime;
private Date registerTime;
private Boolean isActivity;
private String lastLoginIp;
private Set blogs = new HashSet();
private Set fans = new HashSet();
private Set idols = new HashSet();
private Set collections = new HashSet();
private Set comments = new HashSet();
private Set transmits = new HashSet();
}
上面这是微博的User类,下面是微博的微博内容类:
public class MicroBlog
{
private Integer id;
private String content;
private String face;
private String picture;
private String music;
private String video;
private Date time;
private String ip;
private User user;
private Set collections = new HashSet();
private Set transmits = new HashSet();
}
用户类里面有该用户所发布过的所有微博的集合属性值,微博类里面有发布该微博的用户属性。现在的问题是有一个用户发布微博时,服务器端接收到了该用户的id和微博的内容,我现在得把这条微博存储到数据库中,然后我得根据获取到的用户id,去数据库中取出该用户的对象user,但是取user时会调用根据用户id去取他所发布过的微博集合的方法,但是根据用户id去取他所发布过的微博集合的方法中又调用了根据用户的id去取该用户对象的方法(因为数据库微博表中记录的是发布微博的用户的id值),这样就形成了循环调用了,我该怎么解开这种死循环调用呀?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 20:02
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Java中,我们可以使用反射来实现这一目标。以下是一个简单的示例,展示了如何通过反射来解耦用户ID和用户对象的调用。

    首先,我们需要创建一个接口,用于表示用户对象的状态变化。

    public interface UserListener {
        void onUserChanged(User user);
    }
    

    然后,我们可以在User类中实现这个接口,并且为每个方法提供对应的实现。

    public class User implements UserListener {
        // ...
    
        @Override
        public void onUserChanged(User user) {
            this.user = user;
        }
    }
    

    接下来,我们在MicroBlog类中添加一个方法,用于监听用户状态的变化。

    public class MicroBlog extends BaseMicroBlog implements UserListener {
        // ...
    
        @Override
        public void onUserChanged(User user) {
            super.onUserChanged(user);
            if (this.user != null && !this.user.equals(user)) {
                this.collections.addAll(this.user.getCollection());
                this.transmits.addAll(this.user.getTransmit());
            }
        }
    }
    

    最后,在主程序中,你可以使用反射来调用这些方法。

    // 创建一个微博实例
    MicroBlog microBlog = new MicroBlog();
    // 添加用户到集合中
    microBlog.getUser().getFans().add(user);
    
    // 调用用户监听器
    microBlog.onUserChanged(microBlog.getUser());
    
    // 打印粉丝列表
    System.out.println("Fans: " + microBlog.getUser().getFans());
    
    // 打印关注列表
    System.out.println("Follows: " + microBlog.getUser().getFollows());
    

    在这个例子中,onUserChanged()方法会在用户状态发生变化时被调用。它将收集新的粉丝、关注者等信息,并更新相应的集合。

    注意:这只是一个基本的例子,实际的应用可能需要更复杂的逻辑来处理更多的用户状态变化事件。例如,你可能需要跟踪用户的所有行为,而不是只关心他们的粉丝或关注者数量。

    评论

报告相同问题?