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

如何用原始类型调用kotlin中的函数

华锦程
2023-03-14

当函数声明类型参数时:

fun <T> typedFunction(value: T, option: Option<T>) { ... }

我应该如何在kotlin中调用原始的未类型化的类型化函数?

在爪哇中,我有:

// This is a method in an external library. I can not change it.
void <T> typedFunction(T t, Option<T> o) { ... }

// This is my code. optionsValues contains many types
// such as Option<Integer>, Option<String>, and ...
Map<Option<?>, ?> m = readAndParseFromConfigFile();
for (Map.Entry<Option<?>, ?> e : m.entrySet()) {
   // The cast does the trick!
   // I know my code is safe, I can tell the compiler to back off.
   typedFunction((Option) e.getKey(), e.getValue());
}

因为< code>typedFunction声明了一个名为< code>T的类型,并将它的两个参数绑定到这个声明的类型,并且在调用站点上,我循环了多个确切类型未知的值(但已知是安全的,两个参数符合相同的类型),所以我不能按预期的方式调用typedFunction。我得把它铸造成一种原始类型。

如何在科特林实现同样的目标?

这就是IntelliJ转换我的代码的方式:

val m: Map<Option<*>, *>? = ...
for ((key, value) in m!!) {
    typedFunction<*>(key, value)
    //           ^^^  ERROR!!
}

但是之后它给出了一个错误:“函数和属性的类型参数上不允许投影”

共有1个答案

越霖
2023-03-14

由于Kotlin没有原始类型,也没有为函数调用提供星形投影等价物,因此T应该有一个具体的类型。

您可以对选项进行未经检查的强制转换

val m: Map<Option<*>, *>? = ...

for ((key, value) in m!!) {
    @Suppress("unchecked")
    typedFunction(key as Option<Any>, value) // inferred T := Any
}

 类似资料:
  • 问题内容: 我的测试框架中有一个方法可以创建类的实例,具体取决于传入的参数: 问题是,如果构造函数具有基本类型,则这将不起作用,如下所示: 结果是: 原始int会自动装箱到对象版本中,但是如何返回它们以调用构造函数? 问题答案: 使用代替。 根据Javadocs,这是“表示原始类型的Class实例”。 您也可以使用。这是的快捷方式。不仅是类,甚至对于原始类型,您都可以用Java表示。

  • 如何获得原始json输出。如果可能的话,我不想实现用户数据类和解析器。有什么办法吗? 标记重复的帖子(获得原始HTTP响应与改造)不是为Kotlin和我需要Kotlin版本。

  • 如标题所示,在中,是否有方法在延迟(例如1秒)后调用函数?

  • 在java中,方法是数组。sort有两个重载(我在本文中感兴趣),一个用于基本类型,另一个用于引用类型。他们使用不同的排序算法。 如何使用用于引用类型的算法对原始类型进行排序(不使用列表将它们转换为引用类型) 方法<代码>数组。排序(int[])使用双枢轴快速排序。 方法<代码>数组。排序(对象[])使用TimSort。 如果我有一个,我如何使用TimSort对其进行排序?(我知道使用 ,我遇到了

  • 这段代码适用于Java。但是在迁移到Kotlin之后,编译器higlits方法出现以下文本错误: Andswer是: 如果希望在另一个类中使用这个本机函数,可以指定包含它的类,如下所示:

  • 问题内容: 假设我们具有以下暂停功能: 如果要在我现有的Java类之一中调用此函数(暂时无法将其转换为Kotlin)并获取其返回值,则必须提供a 作为其参数(很明显)。 我的问题是,我该如何实施。特别是它的吸气剂。 问题答案: 首先,将模块添加到您的依赖项中。在您的Kotlin文件中,定义以下与Java编写异步API样式相对应的异步函数: 现在,以与在Java世界中使用其他异步API相同的方式在J