genericstypes参数不在范围内

我正在一个小演示Android应用程序,我在一些java类和接口与kotlin混合。 我想扩展名为MvpViewStateActivitygenericstypes参数的java类:

 abstract class MvpViewStateActivity<V extends MvpView, P extends MvpPresenter > { ... } 

MvpView只是一个空的java接口:

 interface MvpView { ... } 

MvpPresenter是这样一个java接口:

 interface MvpPresenter { ... } 

SearchViewActivity (Java):

 class SearchActivity extends MvpViewStateActivity implements SearchView { ... } 

所以现在我创建一个kotlin接口SearchView

 interface SearchView : MvpView { fun setItems( items : List ) } 

Item是pojo数据类。

SearchPresenter也是用kotlin编写的:

 interface SearchPresenter : MvpPresenter { ... } 

所以总结一下:

Java类:

  • MvpViewStateActivity
  • MvpView
  • MvpPresenter
  • SearchViewActivity

Kotlin类/接口

  • SearchView扩展MvpView(java)
  • SearchPresenter扩展MvpPresenter(java)

当我尝试编译该代码时,出现以下错误:

错误:types参数SearchView不在typesvariablesV的范围内,其中V是typesvariables:V扩展在类MvpViewStateActivity中声明的MvpView

但是, SearchView : MvpView (换句话说, SearchView extends MvpView )。

编译器指向那行代码:

SearchActivity扩展了MvpViewStateActivity < SearchView

我可以俯视吗? 这是一个kotlin错误?

我不能重现“不在界限”问题。

这是我第一次使用Kotlin,所以让我解释我做了什么,这样你就可以validation了。 为了清楚起见,我改变了class级名称。

使用Java 7,Eclipse,创建一个包含“generics”包的Java项目。 创建两个文件:

 package generics; public interface IView {} 

 package generics; public interface IPresenter {} 

下载Kotlin编译器版本1.0.0-beta-2423,从项目“bin \ generics”文件夹中提取并复制IView.classIPresenter.class到一个新的“kotlin \ generics”文件夹中。 在“kotlin \ generics”文件夹中创建KGenericViewPresenter.kt

 package generics interface ISearchView : IView {} interface ISearchPresenter : IPresenter {} 

跑:
bin\kotlinc -cp . generics\KGenericViewPresenter.kt

回到Java项目中,添加类文件夹“fromkotlin”,在其中创建一个“generics”文件夹,并从“kotlin \ generics”文件夹复制ISearchView.classISearchPresenter.class
刷新Java项目(以便拾取来自Kotlin的两个新类)。
在Java项目中创建两个新文件:

 package generics; public abstract class AbstractViewStateActivity> {} 

 package generics; public class ViewStateActivity extends AbstractViewStateActivity implements ISearchView {} 

Eclipse不会抱怨,项目的“bin \ generics”文件夹包含文件AbstractViewStateActivity.classViewStateActivity.class

如果这是一个有效的测试,请尝试刷新IDE环境,并确保包中没有名称为VP (也请检查unit testing类)。