gpt4 book ai didi

java - 尝试使用非静态方法引用非静态字段会导致错误

转载 作者:行者123 更新时间:2023-11-29 06:32:29 25 4
gpt4 key购买 nike

我创建了一个类 Obstacle,它有一个 Obstacle 构造函数和一个函数。

package environment;

import static java.lang.System.out;
import environment.WorldEnvironment;

public class Obstacle {

private String obstacleType, setObstacleType;
private int obstacleSize, obstacleXCoord, obstacleYCoord, setObstacleSize, setObstacleXCoord, setObstacleYCoord;

public Obstacle(String getType, int getSize, int getXCoord, int getYCoord){

obstacleType = getType;
obstacleSize = getSize;
obstacleXCoord = getXCoord;
obstacleYCoord = getYCoord;

}

public void generateObstacle(int getPlayerCurrentXCoord, int getPlayerCurrentYCoord){//code in generateObstacle}

在我的主要方法中,我从不同的类调用 generateObstacle()(请注意,此类和 Obstacle 类都在同一个包中)。

import environment.Obstacle;

public void main(String[] args){

spawnPlayer();

while(runGame){

//one example of calling some Obstacle member variables and calling generateObstacle()
switch((playerInput.nextLine()).toUpperCase()){

case "W":
if(currentXCoord + 1 == Obstacle.obstacleXCoord && Obstacle.obstacleYCoord == currentYCoord){

out.println("There is a " + (Obstacle.obstacleType).toLowerCase() + " where you are trying to go.");
printPlayerCoords();

}
else{

movePlayerForward();
printPlayerCoords();
if(spawnObstacle.nextInt(8) == 3){

Obstacle.generateObstacle(currentXCoord, currentYCoord);

}

}
break;

全部

Obstacle.

变量引用抛出错误,说“无法对非静态字段进行静态引用。与此相同

Obstacle.generateObstacle(currentXCoord, currentYCoord);

我不确定为什么会出现此错误,因为 Obstacle 的成员变量都不是静态的,而且 main 方法也不是静态的。 generateObstacle() 方法本身也没有静态字段。这是障碍构造函数:

Obstacle newObstacle = new Obstacle(setObstacleType, setObstacleSize, setObstacleXCoord, setObstacleYCoord);

有人可以向我解释为什么会出现此错误吗?是的,我环顾四周,但没有找到任何好的解释性解决方案。提前致谢。

最佳答案

你不能像这样调用 generateObstacle() 方法 -

 Obstacle.generateObstacle(currentXCoord, currentYCoord);

因为 generateObstacle() 是另一个类中的非静态方法。

解决方案:
(1)generateObstacle() 方法设为静态并使用类名调用-

Obstacle.generateObstacle(currentXCoord, currentYCoord);

(2) 或者创建一个Obstacle的实例,比如说anObstacle用它来调用方法-

 Obstacle anObstacle = new Obstacle(...);
anObstacle.generateObstacle(currentXCoord, currentYCoord);

注意:类的非静态类型成员(即方法或变量)存在于类的对象中。这意味着 non-static 成员仅在创建对象时可用。对于类的 static 成员而言,情况并非如此。您可以访问类的 static 成员,而无需创建类的实例/对象。

关于java - 尝试使用非静态方法引用非静态字段会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29636338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com