Java - 字段不可见

标签 java field

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

在已经准备好的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 不可见”

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

最佳答案

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

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

你最好的选择(如果 Player 对于 LotteryTicket 是必需的,看起来是这样)是在 LotteryTicket 本身的构造函数中拥有 Player 实例,所以有没有额外的开销。

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);

关于Java - 字段不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7703439/

相关文章:

java - Component.getWidth() 在不同的上下文中返回 0

java - Java 解码/编码

c# - Unity3D - 一种将一个字段的值与另一个字段或值进行比较的通用方法

java - 重写 .equals() 方法的问题

java - spring boot无法解析html View

database - Laravel 添加 CLOB 列

C#抽象类静态字段继承

security - 在 sitecore 中的主页项上设置字段级安全性

field - 如果另一个字段在 Expressionengine 中有内容,我如何使一个字段成为必填字段

java - 如何填写Mapper?