public class Agent {
private Space _location;
private String _name;
public void setLocation(Space space){
_location = space;
}
public void usePortal(){
if(_location.getPortal() != null){
Portal.transport(Agent.this);
}
}
}
java.lang.Error:未解决的编译问题: 无法从类型Portal
中对非静态方法传输(代理)进行静态引用以上是它给我的错误。我有一个公共类Space,其中包含一个Portal类型的成员变量和一个getPortal()getter。看起来像:
public class Space {
private String _name;
private String _description;
private Portal _portal;
public Portal getPortal(){
return _portal;
}
}
在我的公共Portal类中,我有一个带有Agent参数的传输方法:
public class Portal {
private String _name;
private String _direction;
private Space _destination;
public Space getDestination(){
return _destination;
}
public void transport(Agent str){
str.setLocation(getDestination());
}
}
我的主要问题是使用usePortal()方法,Space和Portal类功能齐全。我不知道如何在Agent类中的Agent实例上调用该方法。
答案 0 :(得分:1)
java.lang.Error:未解决的编译问题:无法生成静态 从类型引用非静态方法传输(Agent) 门户
这是因为传输方法是instance
方法,而不是static
。
创建Portal
的实例然后使用它或使transport
方法静态
Portal portal = new Portal();
portal.transport(this);
或
public static void transport (Agent str)
我不知道如何在Agent的实例上调用该方法 在Agent类中。
而不是Agent.this
只使用this
答案 1 :(得分:1)
如果不初始化对象引用,则无法调用其他类方法。除非它被声明为静态。
例如:
Portal portal = new Portal();
portal.transport(this);
请注意,this
是对当前对象的引用,在本例中为Agent。
在线进行更多研究,了解java对象的工作原理,并研究静态和非静态上下文。大量的例子!
答案 2 :(得分:0)
这应该有效
public void usePortal(){
if(_location.getPortal() != null){
_location.getPortal().transport(this);
}
}