如何在实例类中的实例上调用方法?

时间:2014-09-26 18:46:38

标签: java methods instance-variables

    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实例上调用该方法。

3 个答案:

答案 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);
    }
}