1

Scala2.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

これらは互換性があると思いました。

誰かがこの問題を回避する方法をアドバイスできますか?

4

1 に答える 1

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)
}

そして、それは問題なくコンパイルされ、実行されます。=を削除すると、現在のエラーが表示されます。

タイプmethodonCreateDialogのクラスのメソッドのオーバーライドに互換性のないタイプがあります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)
    }   
}

注: 私はバンドルされた Eclipse (Juno) で ADT を使用しており、Scala-IDE (Scala nature) と AndroidProguardScala (AndroidProguardScala nature) を含むデフォルトの Android プロジェクトを作成しました。

于 2013-03-10T08:26:49.080 に答える