【问题标题】:How can I call object methods in the constructor of non initialized objects? [duplicate]如何在非初始化对象的构造函数中调用对象方法? [复制]
【发布时间】:2016-05-07 18:58:57
【问题描述】:

我有允许我覆盖它们的刻度方法的 ui 对象,我想在这些刻度方法中调用其他方法。但是我这样做的方式是,对象还没有初始化,所以它不起作用。 这是一个例子:

    //FPS       
    UITextRectangle fps = new UITextRectangle(
        handler, handler.getWidth()-64, 32, 32, 32, Color.DARK_GRAY, Color.GRAY,
        new Ticker(){
          @Override
          public void doTick(){
            //cannot call fps
            fps.setText(Integer.toString(handler.getFPS()));
          }
        });

我怎样才能做到这一点?感谢您提供任何和所有帮助和建议!

编辑因为我的代码错误。

【问题讨论】:

  • “它不工作”是什么意思?你得到一个编译器错误吗?例外?
  • 我建议删除或关闭这个问题,因为它似乎是一个错字问题...
  • "局部变量 fps 可能没有被初始化" 因为它试图在完成初始化之前调用自己,如果你在我编辑它之前看到了代码,很抱歉。我第一次搞砸了。
  • final 回答成功了吗?
  • 很抱歉将其标记为我自己提出并回答的问题的副本,但我认为这应该让您很好地了解为什么这是不可能的。 this.setText(...)(或只是setText(...))不会工作吗?

标签: java constructor


【解决方案1】:

您可以使用doTick 模板方法,而不是传递Ticker 类:

class UITextRectangle {

    public void doTick() {
        // template method, is empty
    }
}
...
UITextRectangle tr = new UITextRectangle(...) {

    @Override
    public void doTick() {
        this.setText(...);
    }
};

【讨论】:

  • 成功了,谢谢!!我开始迷失于其他答案的技术细节。非常感谢
【解决方案2】:

尝试直接调用,不需要使用fps对象,因为你在对象self的回调中

试试这个:

UITextRectangle fps = new UITextRectangle(handler, handler.getWidth()-64, 32, 32, 32, Color.DARK_GRAY, Color.GRAY, new Ticker(){
        @Override
        public void doTick(){ 
            setText(Integer.toString(handler.getFPS()));
        }
    });

【讨论】:

  • 但这会在Ticker上调用setText
  • 我认为 fps 有一个名为 settext() 的方法...
  • fps 有 setText(String text) 方法,Ticker 没有。
【解决方案3】:

在你的类中创建一个属性UITextRectangle fps

另一种解决方案是在初始化后设置Ticker

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 2011-10-15
    • 2011-05-15
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多