gpt4 book ai didi

java - 使用 Android 从 Scala 调用不同的 Java 父构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:54 25 4
gpt4 key购买 nike

我需要继承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 编写大量代码的境地。

关于java - 使用 Android 从 Scala 调用不同的 Java 父构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24230447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com