[英]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.