簡體   English   中英

使用Android從Scala調用不同的Java父構造函數

[英]Call different Java parent constructor from Scala with Android

我需要繼承android.support.v4.view.ViewPager和兩個構造函數。 在Java中,它通過以下方式完成:

class MyViewPager extend android.support.v4.view.ViewPager {
  public ViewPager(Context context) {
    super(context);
  }

  public ViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
  }
}

我在Google上搜索了一段時間,有些人建議在Scala中實現這個,如下所示:

import android.support.v4.view.ViewPager

trait ViewPagerTrait extends ViewPager {
  // ...implement ViewPager non-constructor functions here...
}

object MyViewPager {
  def apply(context: Context) = new ViewPager(context) with ViewPagerTrait
  def apply(context: Context, attrs: AttributeSet) = new ViewPager(context, attrs) with ViewPagerTrait
}

上面的Scala代碼編譯,但是當Android嘗試構建視圖時,似乎沒有正確調用apply方法。 我認為這是因為當Android框架解析XML文件並嘗試創建視圖對象時,它使用反射來查找構造函數,因此它不使用apply方法

正如LimbSoup和David本人已經說過的那樣,這在Scala中根本不可能。 您需要用Java編寫類。

所以壞消息是,你需要一些Java代碼。

好消息是,Scala編譯器和大多數Scala工具都非常支持混合Java / Scala代碼庫。 Java和Scala類可以自由地相互繼承,編譯器會很好地解決它。 因此,您不應該發現自己處於被迫用Java編寫大量代碼的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM