【问题标题】:Static Inner class returning null when instantiating [duplicate]实例化时返回null的静态内部类[重复]
【发布时间】:2019-01-02 23:29:39
【问题描述】:

我有一个名为 Tournament 的公共类,它有一个名为 Team 的嵌套私有静态类。

public class Tournament {

    private Team[] teams;
    private static int noOfTeams;
    private  Queue<Team> queue = new LinkedList<>();
    Team teamA,teamB,winner;


    public Tournament(int noOfTeams) 
    {
        this.noOfTeams = noOfTeams;     
        generateTeams();
    }


    private void generateTeams()    
    {


        for (int i = 0; i < noOfTeams; i++) 
        {       
            this.teams[i] = new Team();  // Returning Null here
            this.teams[i].setId(i);
            this.teams[i].setRank(i);       
            queue.add(this.teams[i]);
        }       

    }

}

所以当我创建一个 Tournament 对象时。构造函数调用 generateTeams() 方法。当我运行 this 时,它在以下行返回 NullPointerException: this.teams[i] = new Team(); (以粗体突出显示)。

由于某种原因,它没有实例化 Team() 对象,因此将空值分配给 teams[i]

OOPS 和嵌套类的新手。可以的话详细解释一下。

提前致谢。

【问题讨论】:

  • '静态内部'是一个矛盾的术语。

标签: java class oop private inner-classes


【解决方案1】:

你需要先实例化数组

this.teams = new Team[noOfTeams];

for (int i = 0; i < noOfTeams; i++) 
{     
    this.teams[i] = new Team();   
    this.teams[i].setId(i);
    this.teams[i].setRank(i);       
    queue.add(this.teams[i]);
} 

但是当您将Team 对象添加到队列中时,为什么还需要一个数组?

【讨论】:

  • 仍然有同样的问题,在 this.teams[i]setId(i); 处返回 NullPointerException;
  • 你做了this.teams = new Team[noOfTeams]; 吗?
  • 是的,我按照上面提到的做了。问题依然存在。如前所述,删除了我在队列中添加的数组。效果很好...!谢谢..!
  • 是的,我按照上面说的做了 - 你在哪里提到的?您为什么不使用您现在使用的代码来编辑您的问题。您的评论 // Returning Null here 没有意义 - 除非您在 new Team 中抛出异常,但我怎么知道,您没有共享该代码
  • 终于修好了。 this.teams = 新团队[noOfTeams];然后在循环中执行了这个 teams[i] = new Team();现在按预期工作。感谢您的帮助..!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
相关资源
最近更新 更多