【问题标题】:Passing "this" from Java Interface to another Class将“this”从 Java 接口传递给另一个类
【发布时间】:2015-02-14 15:42:10
【问题描述】:

为我的 android 项目提供以下类:

Preview extends SurfaceView implements SurfaceHolder.Callback

A extends Doc

我真的不知道怎么问,我知道这不是很好,但我想从 Preview 中获得,我称之为 Doc 的抽象方法。在这个Doc的方法中,我必须调用之前的预览对象的方法。

这是一个例子:

来自 Preview.java :

   Doc _doc = new A();
   private void myMethod() {
       this._doc.process(this)
   }

来自 A.java:

@Override
public void process(Preview p) {
    p.processA();
}

问题是我遇到了一个错误:

类型Doc中的方法process(Preview)不适用于参数(new Camera.PreviewCallback(){})

但是,从我想从预览中调用该方法的事实来看,我无法改变这一点。我尝试了很多东西,例如演员表等。它们都不起作用。

感谢您的帮助!

PS : 我在 Windows 下的 Eclipse 上。

【问题讨论】:

  • 我看不出对A.process(this) 的调用如何产生错误消息...is not applicable for the arguments (new Camera.PreviewCallback(){})。请给我们看更多的代码吗?

标签: java android eclipse oop


【解决方案1】:

假设您从匿名内部类调用A.process(this)(我认为是Camera.PreviewCallback 类型,因此会出现错误消息),您必须编写A.process(Preview.this),因为独立的this 指的是内部类和不要到 Preview 实例。

【讨论】:

    【解决方案2】:

    类型Doc中的方法process(Preview)不适用于参数(new Camera.PreviewCallback(){})

    这只是意味着您传递了Camera.PreviewCallback 的对象,但在您的方法public void process(Preview p) 中您需要Preview 的对象。

    如果您在anonymous class 中编写了这段代码,那么this 将不会指向Preview 类。它将指向内部匿名类的对象。

    因此你需要写A.process(Preview.this)

    【讨论】:

      猜你喜欢
      • 2016-07-20
      • 2013-10-26
      • 2015-07-12
      • 2022-11-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多