重写onCreateDialog()时不兼容的类型

时间:2013-03-10 01:10:32

标签: android scala compiler-errors

我正在尝试使用Scala 2.9.2创建一个Android应用程序。到目前为止,我已经有了一切可以编译。

但是,当我在我的活动中执行以下操作时遇到问题:

override def onCreateDialog(id: Int) {

编译器抱怨类型不兼容,因为Activity.onCreateDialog()采用原始int但我传递的是scala.Int

以下是编译错误:

error: overriding method onCreateDialog in class Activity of type (x$1: Int)android.app.Dialog;
[INFO]  method onCreateDialog has incompatible type
[INFO]   override def onCreateDialog(id: Int) {
[INFO]                ^
[ERROR] one error found

我认为这些是兼容的。

有人可以建议如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

以下内容适用于Scala 2.10,但我认为错误的原因与Scala 2.9.x完全相同。

顺便说一下,onCreateDialog(int)类型中的Activity方法已被弃用,但它不在此处。

现在,我不是任何方式的Scala专家,但从我注意到的,不返回任何内容的函数看起来像def fun(arg) {},而且看起来像def fun(arg) = {}。请注意 = 。如果需要,您还可以拼出返回类型。

所以我试图覆盖你提到的方法,这是(琐碎的)实现:

override def onCreateDialog(id : Int) = {
    super.onCreateDialog(id)
}

它编译并运行得很好。当您删除 = 时,您将收到错误:

  

onCreateDialog方法Activity类的(x$1: Int)android.app.Dialog;类中覆盖方法onCreateDialog        不兼容的类型

整个MainActivity

class MainActivity extends Activity {
    override def onCreate(savedInstanceState : Bundle) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main_activity)
    }

    override def onCreateDialog(id : Int) = {
        super.onCreateDialog(id)
    }   
}

注意:我正在使用ADT与捆绑式Eclipse(Juno),创建了一个默认的Android项目,包括Scala-IDE(Scala nature)和AndroidProguardScala(AndroidProguardScala nature)