【问题标题】:Stuck on how to add to a list in another class坚持如何添加到另一个班级的列表
【发布时间】:2015-06-26 20:42:42
【问题描述】:

我有一个类 DB,其中包含一个列表:

private List<User> users;

以及允许将用户添加到列表中的 addUser 方法

public User addUser(String name) {

另一个类User,需要创建User类的实例,所以我尝试使用以下代码:

public User(String name) {
        DB.addUser(name);

但它返回的错误是我无法对非静态方法进行静态引用。我很茫然,因为要创建 User 类的实例,我必须将它放入列表中,但由于列表是私有的,我必须使用 DB 的方法,但我不能这样做没有得到错误...有什么办法可以解决这个问题吗?

【问题讨论】:

  • 能否将 DB 中的 addUser 函数设为静态?
  • @RishavKundu 那没有意义。这显然是一种改变状态的方法。
  • 你需要创建一个DB实例,或者将addUser设为静态
  • 为什么不向DB添加一个getUsers()方法,将ref返回给List,然后调用getUsers().add(new User(someName));
  • 亚瑟,addUser 到底是做什么的?将其代码添加到您的问题中。

标签: java list class methods


【解决方案1】:

这里的这个函数是以静态方式调用addUser

public User(String name) {
    DB.addUser(name);
}

但是下面的这个函数需要实例化一个对象才能调用它(非静态)

public User addUser(String name) { ... }

所以改成

public static User addUser(String name) { ... }

或者创建一个DB实例并调用方法

public User(String name) {
    DB db = new DB();
    db.addUser(name);
}

【讨论】:

  • 第二个选项没有意义。为什么每次创建新用户时都要创建一个新数据库?
  • ..?我没有考虑他的问题的应用逻辑,我在这里只是为了修复一个编译错误。他不是在寻求逻辑方面的帮助
【解决方案2】:

似乎有一些你不清楚的基础知识。

  1. 成员始终是私有的,要与他们交互,您应该创建公共的 setter 和 getter。

    公共列表 getUsers(){ 返回用户; }

    public void getUsers(列出用户){ this.users=用户; }

  2. 作为一个好的编码标准,命名应该描述提供特定动作的行为 因此

用户添加用户(字符串名称)

考虑到它的实际实现似乎非常模棱两可,因为它会将用户添加到列表中。

  1. 如果 DB 类是一个依赖项,那么它应该被实例化 假设您从 main 调用此代码

    用户用户=新用户(); 数据库 dbInstance=新数据库(); dbInstance.setUsers(new ArrayList()); dbInstance.getUsers().add(user);

提供更具体的答案,等待进一步要求的详细信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多