Java - 字段不可见

时间:2011-10-09 12:18:02

标签: java field

作为我作业的一部分,我已经获得了一个已经准备好的public static void main方法。我的工作是通过创建与此相关的所有方法来补充这一点。这应该在其他三个类中完成。

在已经准备好的main方法中,有以下代码:

ticket = new LotteryTicket(10);
ticket.ticketOwner = new Player();

LotteryTicketPlayer是我创建的其他类。 LotteryTicket类中的相关实例变量是:

private LotteryRow[] rows;
private Player ticketOwner;

public LotteryTicket(int maxNumberOfRows) {
    this.rows = new LotteryRow[maxNumberOfRows];
}
如上所述,

Player是我创建的另一个类。在这个类中,除了别的之外,还有一个用户输入数据的方法,如姓名,地址,邮政编码等。

当我尝试运行程序时,ticket.ticketOwner = new Player();行出错。错误是:“字段LotteryTicket.ticketOwner不可见”

这可能是什么原因?我非常感谢任何帮助!我希望我提供的代码足够了。我以前没有遇到过这个错误信息,所以我不知道该怎么做。

5 个答案:

答案 0 :(得分:9)

问题的核心是您尝试访问的字段(ticketOwner)标记为private。此外,至少从我们看到的任何内容来看,似乎都缺少用于访问它的getter / setter。

虽然对此的快速修正是添加getter/setters并使用它们访问该字段,或者一个丑陋的方法是创建字段public。但你想阅读......

你最好的选择(如果玩家是LotteryTicket所必需的,看起来如此)就是在Player本身的构造函数中拥有LotteryTicket实例,因此没有额外的开销。

public LotteryTicket(int maxNumberOfRows, Player player) {
        this.rows = new LotteryRow[maxNumberOfRows];
        this.ticketOwner = player;
}

修改

您的调用将如下所示:

Player p = new Player();
// invoke APIs on (Player p), if needed
ticket = new LotteryTicket(10, p);

答案 1 :(得分:5)

ticketOwner被声明为私有,因此在执行类中不可见。

在票证类中,你必须添加一个setter方法。

public void setTicketOwner(Player p) {

this.ticketOwner = p;

}

然后代替

ticket.ticketOwner = new Player();

ticket.setTicketOwner(new Player());

答案 2 :(得分:2)

他们已被宣布为私有,宣称他们是公开的,甚至更好地创建公共getters/setters进行封装。

答案 3 :(得分:1)

您将其声明为私有var

答案 4 :(得分:1)

private表示无法从其他类访问它。

通常有一种方法,如setTickerOwner,用于从另一个类设置这样的字段。