【发布时间】:2020-04-03 23:10:52
【问题描述】:
作为问题的序言,我对 Java 很陌生。
我有名为 Game、Player 和 SystemIO 的类。
我的 main() 在 Game 类中。下面是它的代码
public static void main(String[] args){
SystemIO systemIO = new SystemIO();
}
一旦 SystemIO 被调用,它的构造函数就会创建一个 Player 的实例,其中包含以下行
Player player = new Player("Bob");
其中 Player 构造函数将 1 个参数作为字符串。
在 SystemIO 类的更下方,我有一个从“播放器”实例访问信息的方法。
player.getName();
当我尝试这样做时,控制台报告
SystemIO.java:339: error: cannot find symbol
我已经检查过我没有尝试使用大写的“Player”来引用类名。 就像我说的那样,我对 Java 非常陌生,只是想绕开它,我相信这是一个范围问题……但我不确定。
编辑以添加可重现的代码:
Game.java
package com.myapps;
import com.myapps.system.SystemIO;
public class Game{
public static void main(String[] args){
SystemIO systemIO = new SystemIO();
}
}
Player.java
package com.myapps.player;
public class Player{
String name;
public Player(String playerName){
name = playerName;
}
}
public String getName(){
return name;
}
SystemIO.java
package com.myapps.system;
import com.myapps.player.Player;
public class SystemIO{
public SystemIO(){
Player player = new Player("Bob");
readPlayerName();
}
public void readPlayerName(){
System.out.println(player.getName());
}
}
【问题讨论】:
-
几乎可以肯定是因为范围。不幸的是,您没有包含足够的代码来确定。将您的问题编辑为minimal, reproducible example。描述代码没有帮助。
-
这绝对是一个范围错误。感谢您的帮助。
-
public readPlayerName(){应该是编译器错误。您缺少返回类型。我认为应该是public void readPlayerName(){- 并且您也可以将变量传递给您的方法。所以 could 已经是public void readPlayerName(Player player),然后您可以将player传递给该方法(除了在提供的答案中将其设为类字段)。 -
@ElliottFrisch 是的。我修好了它。在实际代码中,返回类型存在且有效。
标签: java constructor scope instance