我正在开发一个演示的android应用程序,我把一些java类和接口与kotlin混合在一起。我想从一个带有名为MvpViewStateActivity
的泛型类型参数的java类进行扩展。
abstract class MvpViewStateActivity<V extends MvpView, P extends MvpPresenter<V> > { ... }
其中MvpView
只是一个空的java接口:
interface MvpView { ... }
MvpPresenter
是一个像这样的java接口:
interface MvpPresenter<V extends MvpView> { ... }
和SearchViewActivity
(Java):
class SearchActivity extends MvpViewStateActivity<SearchView, SearchPresenter>
implements SearchView { ... }
所以现在我创建了一个kotlin接口SearchView
interface SearchView : MvpView {
fun setItems( items : List<Item> )
}
其中Item
是pojo数据类。
SearchPresenter
也是用kotlin编写的:
interface SearchPresenter : MvpPresenter<SearchView> { ... }
因此,总结一下:
Java类:
Kotlin类/接口
当我试图编译该代码时,我会得到以下错误:
错误:类型参数SearchView不在类型变量V的范围内,其中V是类型变量:v扩展了在MvpViewStateActivity类中声明的MvpView
但是SearchView : MvpView
(换句话说,SearchView extends MvpView
)。
编译器指向这一行代码:
MvpViewStateActivity<SearchView的SearchActivity扩展
我是不是忽略了什么?这是kotlin虫吗?
发布于 2015-11-20 23:35:36
我不能重复“不受限制”的问题。
这是我第一次使用Kotlin,所以让我解释一下我做了什么,这样您就可以验证了。为了清楚起见,我改了名字。
使用Java 7,Eclipse,创建一个带有“泛型”包的Java项目。创建两个文件:
package generics;
public interface IView {}
和
package generics;
public interface IPresenter<VIEW extends IView> {}
下载Kotlin编译器版本1.0.0-beta-2423,提取并复制项目"bin\generics“文件夹中的IView.class
和IPresenter.class
到一个新的"kotlin\generics”文件夹中。在"kotlin\generics“文件夹中创建KGenericViewPresenter.kt
:
package generics
interface ISearchView : IView {}
interface ISearchPresenter : IPresenter<ISearchView> {}
运行:
bin\kotlinc -cp . generics\KGenericViewPresenter.kt
回到Java项目中,添加类文件夹"fromkotlin",在其中创建一个“泛型”文件夹,并从"kotlin\generics“文件夹复制ISearchView.class
和ISearchPresenter.class
。
刷新Java项目(以便从Kotlin获取两个新类)。
在Java项目中创建两个新文件:
package generics;
public abstract class AbstractViewStateActivity<VIEW extends IView, PRESENTER extends IPresenter<VIEW>> {}
和
package generics;
public class ViewStateActivity extends AbstractViewStateActivity<ISearchView, ISearchPresenter>
implements ISearchView {}
Eclipse没有抱怨,该项目的"bin\generics“文件夹包含文件AbstractViewStateActivity.class
和ViewStateActivity.class
。
如果这是一个有效的测试,尝试刷新您的IDE环境,并确保包中没有名称为V
或P
的类(也检查单元测试类)。
https://stackoverflow.com/questions/33834222
复制相似问题