当前位置: 首页 > 知识库问答 >
问题:

如何使用Kotlin interop强制泛型类型

谷梁裕
2023-03-14

我在Kotlin中有一个方法,它返回一个泛型列表的Rx可观察值:

public fun getObservable(): Observable<List<FooBar>> {
    return Observable.just(theList)
}

因为Kotlin list特征定义为list ,Java将看到返回类型为Observable >

是否有一种方法告诉Kotlin编译器,Java应该将其视为可观察的 >

共有1个答案

寿毅庵
2023-03-14

编辑:这种行为在Kotlin Beta 4中发生了变化。参见杰森·米纳德的回答。

我可以看到两个选择:

>

  • 第一个是返回一个可观察的 > 。由于列表在kotlin中是不可变的,因此它被声明为列表 ,因为类型为T的对象只能从中取出。
    mutableList另一方面是Java真正的列表等效项:因为它是可变的,所以它被声明为mutableList
    所以您的函数是:

    public fun getObservable(): Observable<MutableList<FooBar>>
            = Observable.just(theList)
    

    这个解决方案的问题是,如果您在kotlin中使用它,如果您只想拥有一个可观察的不可变列表,您就会授予对列表的“太多”访问权限。

    第二个选择是用java编写一个“代理”方法,使强制转换一劳永逸:

    @SuppressWarnings("unchecked")
    public static Observable<List<String>> _getObservable() { return (Observable) TestPackage.getObservable(); }
    

    这是丑陋的,但它的工作,它没有打破科特林

    public static Observable<List<String>> _getObservable() {
        return TestPackage.getObservable().map(new Func1<List<? extends String>, List<String>>() {
            @Override
            public List<String> call(List<? extends String> list) {
                return Collections.unmodifiableList(list);
            }
        });
    }
    

  •  类似资料:
    • 我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类

    • 问题内容: 我不明白为什么在尝试执行以下操作时会收到警告(未经检查的演员表): 我的意思是将castedMap发布到外部代码的危险是什么?两种操作均可在运行时完美运行: 使用SomeType类型的键从castedMap获取元素 使用SomeType类型的键将元素放入castedMap中。 我只是使用@SuppressWarnings(“ unchecked”)取消警告。 问题答案: 答案可能很无聊

    • 我在我们公司做项目,我有一个注入对象的问题。让我们考虑一下我有这个实体提供商: 并使用上面的实体提供程序扩展JPAContainer 问题是(我理解),我无法使用类类型定义@Inject对象,因为Inject方法需要一个空构造函数。这里有什么解决方案吗?如何让它发挥作用?现在我得到了一个例外 非常感谢您的回答:)Ondrej

    • 我有一个通用类。它看起来像这样: 显然,conevertdatajsonstring方法仅在字符串类型为T时调用。但有一个警告: 类型安全:未选中从字符串转换为T 有没有一种方法可以在不使用SuppressWarnings的情况下解决此问题: @抑制警告(“未选中”) 方法之前?

    • 考虑一个具有的API,如下所示: 很简单,只有页面大小和跳过计数属性。 此外,现在我还有一些类,它们也包含但未分页。 在我的测试中,我希望他们都能实现一个接口,这样我就可以用一些更基本的测试来生成一个通用的基本测试类。为此,我添加了我认为会起作用的内容: 我将PagedResults更改为: 错误 但现在编译器抱怨PagedResultBase继承的所有地方的使用情况(?)从。 但是,如果我将接口

    • 问题内容: 我在寻找什么: 我正在寻找一种可以在地图的键和值上强制类型的东西:有点像。但是,我还想 在 每个键/值条目中强制类型匹配,但是 在 条目 之间 ,不必强制任何类型。 例如,在同一张地图中,这些键/值对应视为有效: 映射到 映射到 映射到 但是,这样的事情将是无效的: 映射到 映射到 如何使用Java泛型完成此任务? 我不想要的是: 我知道我可以实现类似的东西,其中对接受相同类型的键/值