Kotlin Custom View类实现了一个无法在`:app:compileDebugKotlinAfterJava`中解析的接口。 相同的Java版本正常工作

我有一个Android项目,其中包含一个带有泛型类的aar library module ,这些泛型类被用作几个应用程序的基础。 一切都是用Kotlin编写的,没有使用Java代码(第三方库除外)。

尝试组装应用程序以运行时,会发生此问题。 试图运行我的应用程序时出现以下错误:

 :app:compileDebugKotlinAfterJava e: Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath: class com.test.app.view.ECMKotlinTextView, unresolved supertypes: com.test.lib.localization.Localizable 

为了这个问题的目的,我写了一个自定义TextView的两个单独的版本,它扩展了android.widget.TextView类并实现了一个接口,让我们说Localizable ; 一个在Java ,另一个在Kotlin

ECMJavaTextView.java

 package com.test.lib.view; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.util.AttributeSet; import android.widget.TextView; import com.test.lib.localization.Localizable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Map; public class ECMJavaTextView extends TextView implements Localizable{ public ECMJavaTextView(Context context) { super(context); } public ECMJavaTextView(Context context, AttributeSet attrs) { super(context, attrs); } public ECMJavaTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public ECMJavaTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Nullable @Override public String getTextId() { return "JAVA TEXT ID"; } @Override public void setTextId(@Nullable String s) { } @Nullable @Override public Map<String, String> getTextArgs() { return null; } @Override public void setTextArgs(@Nullable Map<String, String> map) { } @Override public void updateText(@NotNull String text) { } } 

ECMKotlinTextView.kt

 package com.test.lib.view import android.annotation.TargetApi import android.content.Context import android.graphics.Canvas import android.os.Build import android.util.AttributeSet import android.util.Log import android.widget.TextView import com.test.lib.localization.Localizable import com.test.lib.localization.updateText class ECMKotlinTextView : TextView , Localizable { override var textId: String? = "textID" get() = field set(value) { field = value } override var textArgs: Map<String, String>? = null get() = field set(value) { field = value } override fun updateText(text: String) { } constructor(context: Context?) : super(context){ } constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) { } constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) { } @TargetApi(Build.VERSION_CODES.LOLLIPOP) constructor(context: Context?, attrs: AttributeSet?, defStyle: Int, defStyleRes: Int) : super(context, attrs, defStyle, defStyleRes) { } override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) } } 

在库模块中都有xml布局,我将它们包含在main_activity.xml文件中。 我设法将问题隔离到findViewbyId()方法(在这里我使用kotlin-extensions库来获取视图;尝试两个)。

MainActivity.kt

 import kotlinx.android.synthetic.main.content_main.* class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) var java_textV = demo_java_text_view as ECMJavaTextView Log.d("JAVA", "${java_textV.textId}") var kotlin_textV = demo_kotlin_text_view as ECMKotlinTextView Log.d("Kotlin", "${kotlin_textV.textId}") } ... 

第二次转换总是给出上面提到的错误,但是如果我删除了转换( ECMKotlinTextView ),我不能访问我需要的Localizable方法。 更有趣的一点是, JAVA类按预期工作。

不知道是否是我错过了或没有设置,或者如果它是目前在Kotlin插件的错误。 有人可以帮我吗? 有些见解将不胜感激。