首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >泛型类型参数不在界限之内

泛型类型参数不在界限之内
EN

Stack Overflow用户
提问于 2015-11-20 19:05:06
回答 1查看 6.5K关注 0票数 0

我正在开发一个演示的android应用程序,我把一些java类和接口与kotlin混合在一起。我想从一个带有名为MvpViewStateActivity的泛型类型参数的java类进行扩展。

代码语言:javascript
运行
复制
abstract class MvpViewStateActivity<V extends MvpView, P extends MvpPresenter<V> > { ... }

其中MvpView只是一个空的java接口:

代码语言:javascript
运行
复制
interface MvpView { ... }

MvpPresenter是一个像这样的java接口:

代码语言:javascript
运行
复制
interface MvpPresenter<V extends MvpView> { ... }

SearchViewActivity (Java):

代码语言:javascript
运行
复制
class SearchActivity extends MvpViewStateActivity<SearchView, SearchPresenter>
                     implements SearchView { ... }

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

代码语言:javascript
运行
复制
interface SearchView : MvpView { 
    fun setItems( items : List<Item> )
 }

其中Item是pojo数据类。

SearchPresenter也是用kotlin编写的:

代码语言:javascript
运行
复制
interface SearchPresenter : MvpPresenter<SearchView> { ... }

因此,总结一下:

Java类:

  • MvpViewStateActivity
  • MvpView
  • MvpPresenter
  • SearchViewActivity

Kotlin类/接口

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

当我试图编译该代码时,我会得到以下错误:

错误:类型参数SearchView不在类型变量V的范围内,其中V是类型变量:v扩展了在MvpViewStateActivity类中声明的MvpView

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

编译器指向这一行代码:

MvpViewStateActivity<SearchView的SearchActivity扩展

我是不是忽略了什么?这是kotlin虫吗?

EN

回答 1

Stack Overflow用户

发布于 2015-11-20 23:35:36

我不能重复“不受限制”的问题。

这是我第一次使用Kotlin,所以让我解释一下我做了什么,这样您就可以验证了。为了清楚起见,我改了名字。

使用Java 7,Eclipse,创建一个带有“泛型”包的Java项目。创建两个文件:

代码语言:javascript
运行
复制
package generics;
public interface IView {}

代码语言:javascript
运行
复制
package generics;
public interface IPresenter<VIEW extends IView> {}

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

代码语言:javascript
运行
复制
package generics

interface ISearchView : IView {}
interface ISearchPresenter : IPresenter<ISearchView> {}

运行:

bin\kotlinc -cp . generics\KGenericViewPresenter.kt

回到Java项目中,添加类文件夹"fromkotlin",在其中创建一个“泛型”文件夹,并从"kotlin\generics“文件夹复制ISearchView.classISearchPresenter.class

刷新Java项目(以便从Kotlin获取两个新类)。

在Java项目中创建两个新文件:

代码语言:javascript
运行
复制
package generics;
public abstract class AbstractViewStateActivity<VIEW extends IView, PRESENTER extends IPresenter<VIEW>> {}

代码语言:javascript
运行
复制
package generics;
public class ViewStateActivity extends AbstractViewStateActivity<ISearchView, ISearchPresenter> 
    implements ISearchView {}

Eclipse没有抱怨,该项目的"bin\generics“文件夹包含文件AbstractViewStateActivity.classViewStateActivity.class

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33834222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档