我需要继承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尝试构建 View 时,似乎没有正确调用
apply
方法。我认为这是因为,当Android框架解析XML文件并尝试创建 View 对象时,它使用反射来查找构造函数,因此它没有使用apply
方法 最佳答案
正如 LimbSoup 和 David 本人已经说过的,这在 Scala 中是完全不可能的。您将需要用 Java 编写该类。
所以坏消息是,您将需要一些 Java 代码。
好消息是,Scala 编译器和大多数 Scala 工具对混合的 Java/Scala 代码库有很好的支持。 Java 和 Scala 类可以自由地相互继承,编译器会很好地解决它。因此,您不应该发现自己处于被迫用 Java 编写大量代码的境地。