首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么它在Kotlin中抱怨`声明有从平台调用中推断出的类型`?

在Kotlin中,当我们使用Java代码或库时,可能会遇到"声明有从平台调用中推断出的类型"的警告或错误。这是由于Kotlin的类型系统与Java的类型系统之间存在一些差异导致的。

Kotlin是一种静态类型语言,它通过类型推断来确定变量的类型。然而,Java是一种动态类型语言,它允许在运行时进行类型转换。当我们在Kotlin中使用Java代码时,Kotlin编译器无法确定Java代码中的具体类型信息,因此会发出警告或错误。

这个警告或错误的原因是为了确保类型安全。在Kotlin中,我们可以使用"平台类型"来表示无法确定的类型。当我们使用平台类型时,编译器无法提供类型安全的检查,因此会发出警告。这是为了提醒开发者在使用平台类型时要小心,以避免潜在的类型不匹配或错误。

为了解决这个警告或错误,我们可以采取以下几种方法:

  1. 显式地指定变量的类型:通过显式地指定变量的类型,我们可以避免使用平台类型,从而消除警告或错误。例如,将变量声明为具体的类型,而不是使用自动推断。
  2. 使用类型转换操作符:如果我们确切知道平台类型的实际类型,可以使用类型转换操作符将其转换为具体的类型。这样可以消除警告或错误,并提供类型安全。
  3. 使用@Suppress注解:如果我们确定代码中的平台类型是安全的,并且不会导致类型不匹配或错误,可以使用@Suppress注解来抑制警告或错误。但是,我们应该谨慎使用该注解,并确保代码的类型安全性。

总之,当在Kotlin中使用Java代码时,可能会遇到"声明有从平台调用中推断出的类型"的警告或错误。这是由于Kotlin的类型系统与Java的类型系统之间的差异导致的。我们可以通过显式指定类型、使用类型转换操作符或使用@Suppress注解来解决这个问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Kotlin互操作——Kotlin与Java互相调用

Kotlin调用Java Kotlin在设计时就考虑了与Java互操作性。可以Kotlin自然地调用现有的Java代码,在Java代码也可以很顺利地调用Kotlin代码。...Java任何引用都可能是null,这使得Kotlin对来自Java对象进行严格空安全检查是不现实。Java声明类型Kotlin称为平台类型,并会被特别对待。...当把一个平台值赋给一个Kotlin变量时,可以依赖类型推断(该变量会具有所推断出平台类型,如上例item所具有的类型),或者选择我们所期望类型(可空或非空类型均可)。...⑥ 空安全性 当Java调用Kotlin函数时,没有任何方法可以阻止Kotlin空值传入。...⑦ 型变泛型 当Kotlin使用了声明处型变时,可以通过两种方式Java代码中看到它们用法。

3.8K10

Kotlin 1.2 新特性

平台平台项目是 Kotlin 1.2 一个新实验性功能,它允许开发者相同代码库构建应用程序多个层——后端、前端和Android应用程序,在这个跨平台方案,主要包含三个模块。...要从通用模块调用特定于平台代码,可以指定所需声明:所有特定于平台模块需要提供实际实现声明。而在为特定平台编译多平台项目时,会生成通用及特定平台相关部分代码。...大家都知道,Kotlin类型推断系统是非常强大,现在Kotlin编译器也支持通过强制转换信息,来推断出变量类型了。...比如说,如果你在调用一个返回“T”泛型方法时,并将它返回值“T”转换为特定类型如“Foo”,编译器就会推断出这个方法调用“T”其实是“Foo”类型。...Kotlin 1.2开始,调用x.equals(…)一个平台类型null值会抛出一个NPE (但是x == …不会)。

1.7K100
  • Kotlin与Java互操作

    可以Kotlin自然地调用现有的Java代码,在Java代码也可以很顺利地调用Kotlin代码。例如,在Kotlin调用JavaUtillist库。...Java任何引用都可能是null,这使得Kotlin对来自Java对象进行严格空安全检查是不现实。Java声明类型Kotlin称为平台类型,并会被特别对待。...当把一个平台值赋给一个Kotlin变量时,可以依赖类型推断(该变量会具有所推断出平台类型,如上例item所具有的类型),或者选择我们所期望类型(可空或非空类型均可)。...使注解像任何纯可空性注解一样工作,即对不当用法报错并影响注解声明类型Kotlin呈现; 对于 MigrationStatus.WARN,不当用法报为警告而不是错误; 但注解声明类型仍是平台类型...KClass 有时你需要调用 KClass 类型参数 Kotlin 方法。

    3.5K30

    Kotlin 漫谈之函数定义

    单一表达式」来声明函数时候返回类型可以被推断出来,所以可以忽略不写。...KotlinKotlin 函数参数使用帕斯卡尔(Pascal)符号定义,例如 name: type,使用逗号分割不同参数,必须明确定义参数类型。...Swift 函数参数 函数参数声明方式和声明变量相同,不过函数参数外部名(实参名)和内部名(形参名)之分 func f(valueA x: Int, valueB y: Int) { } 这里...在使用「单一表达式」来声明函数时候返回类型可以被推断出来,所以可以忽略不写。...Kotlin 函数参数 Kotlin 函数参数使用帕斯卡尔(Pascal)符号定义,例如 name: type,使用逗号分割不同参数,必须明确定义参数类型

    70550

    号称取代 Java Kotlin 语言到底是什么鬼?

    个人角度赞成 IDEA 做法因为我想不到哪些应用场景需要遮蔽方法参数。 类型推断 在Kotlin,当你声明一个var或是val,你通常会让编译器右边表达式类型猜测变量类型。...事实并没有想象简单。 当 Kotlin 代码必须调用 Java 代码时,事情会变得很糟糕,比如库是用 Java 编写,我相信这种情况很常见。于是第三种类型产生了,它被称为平台类型。...反向类型声明 C 系列编程语言标准声明类型方法。简而言之,首先指定一个类型,然后是该符合类型东西,比如变量、字段、方法等等。...但是,除此之外,这些集合工厂功能非常简洁,而且它们是另一种“内置”到该语言东西,而它们实际上只是库函数。 你只是抱怨使用:进行类型声明。...最后想法 作者列举例子,我感觉他只是了解语言表面。 很难想象他对此投入很多时间。

    2.2K50

    介绍Kotlin第一部分(翻译篇)

    1、介绍Kotlin Kotlin是jvm新开发语言。 谷歌推广Kotlin作为其基于javaAndroid平台第一类语言在五月份。从那之后我就纳闷:这是什么语言?...① Kotlin变量 在Kotlin声明变量一些不同,我们有关键字val和var,这看起来很相似,但其实有一个重要区别: 当变量被声明为val时是不可变(只读),你只能给它分配一次值。...这背后还有一个理由,编译器现在可以决定是否要进行类型推断。这意味着Kotlin比Java有着更强大类型推断。实际上,你也可以不用声明这些类型编译器也会明白你意思。...val hell0 = "hi" val w0rld = "earth" 只有当变量被赋值时候,该变量类型才能被推断出来。 ② fun 这是什么样功能呢?...in关键range通过..来分配i值。

    65740

    【码上开学】Kotlin 高阶函数、匿名函数和 Lambda 表达式

    比如我在 a 内部一处对别的方法调用,这个方法可能是 b,可能是 c,不一定是谁,我只知道,我在这里一个调用,它参数类型是 int ,返回值类型也是 int ,而具体在 a 执行时候内部调用哪个方法...对象是不能加个括号来调用,对吧?但是函数类型对象可以。为什么?...不过我们先停下想一想:这个 Lambda 这也不写那也不写……它不迷茫吗?它是怎么知道自己参数类型和返回值类型? 靠上下文推断。我调用函数在声明地方明确参数信息吧?...对比 Java Lambda 再说一下 Java Lambda。对于 Kotlin Lambda,很多 Java 过来的人表示「好用好用但不会写」。...简单总结一下: 在 Kotlin 里,一类 Java 不存在类型,叫做「函数类型」,这一类类型对象在可以当函数来用同时,还能作为函数参数、函数返回值以及赋值给变量; 创建一个函数类型对象三种方式

    2.1K20

    那个男人再发力,原来我以前学 Lambda 都是假

    比如我在 a 内部一处对别的方法调用,这个方法可能是 b,可能是 c,不一定是谁,我只知道,我在这里一个调用,它参数类型是 int ,返回值类型也是 int ,而具体在 a 执行时候内部调用哪个方法...对象是不能加个括号来调用,对吧?但是函数类型对象可以。为什么?...不过我们先停下想一想:这个 Lambda 这也不写那也不写……它不迷茫吗?它是怎么知道自己参数类型和返回值类型? 靠上下文推断。我调用函数在声明地方明确参数信息吧?...对于 Kotlin Lambda,很多 Java 过来的人表示「好用好用但不会写」。这是一件很有意思事情:你都不会写,那你是怎么会用呢?...简单总结一下: 在 Kotlin 里,一类 Java 不存在类型,叫做「函数类型」,这一类类型对象在可以当函数来用同时,还能作为函数参数、函数返回值以及赋值给变量; 创建一个函数类型对象三种方式

    65120

    Java 到 Kotlin,再从 Kotlin 回归 Java

    Kotlin ,当你申明一个 var 或者 val 时,你通常让编译器右边表达式类型猜测变量类型。我们将其称做局部变量类型推断,这对程序员来说是一个很大改进。...意味着具有未定义空值T类型。这种奇怪类型不能用Kotlin来表示,它只能从Java类型推断出来。T!会误导你,因为它放松了对空限制,并禁用了Kotlin空值安全限制。...现在,您想要从Kotlin调用format(string)。您应该使用哪种类型来使用这个Java方法结果?好吧,你三个选择。 第一种方法。...在我看来,Kotlin类型系统中所有这些类似scala东西!,?和!!,实在是太复杂了。为什么KotlinJavaT类型推断到T!而不是T?呢?...在C系列编程语言中,一个标准声明类型方式。即先写出类型,再写出声明为该类型东西(变量、字段、方法等)。 在Java如下表示: ? 在Kotlin则是相反顺序表示: ?

    1.8K40

    Kotlin初探

    Kotlin语法,语句结尾都不在有分号“;”。 在Kotlin变量声明两种类型,val修饰变量是只读变量即只能赋值一次,再次赋值时就会编译错误 ,如果我们需要多次修改值就需要使用var。...我们也可以这样写var str= ""省略了生命变量类型,它可以根据赋值而自动推断出类型。...5 声明类型Kotlin中有如下几种Number类型,他们都是继承自Number抽象类。...在Kotlin中表达式也可以作为函数体,编译器可以推断出返回类型,可以简化为 为了更好理解表达式可以作为函数体,我们可以创建一个函数获取两个数最大值,如下: 需要注意是若if后有多个表达式,如下...简洁性,我们创建一个Staff类,String类型name,position和泛型T(使用泛型仅仅是为了在Kotlin接触以下泛型) java实现代码: Kotlin数据类: 通过对比我们就看出了优点了

    1.6K20

    Kotlin、Swift、Scala 延迟求值

    BooleanByName valueByName 是一个函数,Scala 当中对于不修改类内部状态无参函数通常声明成没有括号样子,这样函数调用时如同访问属性一样( 如代码 _.valueByName...延迟求值角度来讲与 Scala 是没什么差别的,不过大家仔细看会发现我们声明属性时用是 var,也就是说 value 是可变,这与 Scala、Kotlin 都不一样。...更有趣是,如果我们希望 value 是只读,将它声明改为 lazy let value = ...,Swift 编译器会抱怨说 lazy 只能修饰 var。 纳尼?...Hmmm,这个赋值行为语言运行角度来讲确实如此,可是这个逻辑不应该对开发者是透明么,为什么要让开发者操心这么多?...,可以通过 @autoclosure 来简化调用过程参数写法,这一点其实形式上与 Scala 传名参数类似。

    1.7K20

    Spring认证中国教育管理中心-Spring Data R2DBC框架教程七

    Kotlin 支持 Kotlin是一种面向 JVM(和其他平台静态类型语言,它允许编写简洁优雅代码,同时提供与用 Java 编写现有库出色互操作性。...尽管 Java 不允许您在其类型系统中表达空安全性,但 Spring Data API 使用包声明JSR-305工具友好注释进行了注释org.springframework.lang。...默认情况下,来自 Kotlin 中使用 Java API 类型被识别为平台类型,对其进行空检查。...Kotlin 类型 Spring API 推断出,但在使用时应该知道 Spring API 可空性声明可以演变,即使在次要版本之间也是如此,并且将来可能会添加更多检查。...如果自定义方法是可调用,则调用自定义实现方法会将 Coroutines 调用传播到实际实现方法,suspend而无需实现方法返回反应类型,例如Mono或Flux。

    1.3K40

    Java 到 Kotlin,再从 Kotlin 回归 Java

    我感觉 —— IDEA 是对。我无法想象存在这种遮蔽了方法参数有效用例。 类型推断 在 Kotlin ,当你申明一个 var 或者 val 时,你通常让编译器右边表达式类型猜测变量类型。...它被称为平台类型,它意思是T或T?,或者如果我们想要精确,T!意味着具有未定义空值T类型。这种奇怪类型不能用Kotlin来表示,它只能从Java类型推断出来。T!...null : text; } } 现在,您想要从Kotlin调用format(string)。您应该使用哪种类型来使用这个Java方法结果?好吧,你三个选择。 第一种方法。...为什么KotlinJavaT类型推断到T!而不是T?呢?似乎Java互操作性破坏了Kotlin杀手特性——类型推断。看起来您应该显式地声明类型(如T?)...相反顺序类型声明 在C系列编程语言中,一个标准声明类型方式。即先写出类型,再写出声明为该类型东西(变量、字段、方法等)。

    1.5K10

    Kotlin 1.2 哪些新特性

    原文链接是《What's New in Kotlin 1.2》,下面的译文节选了“其它语言特性”部分(“Other Language Features”) 通过注解声明数组变量 Kotlin1.2...开始,允许通过注解声明数组参数这种语法,从而取代了arrayOf函数数组声明方式。...,能够推断出变量类型 Kotlin编译器现在支持通过强制转换信息,来推断出变量类型。...如果你在调用一个返回“T”泛型方法时,试图将它返回值“T”转换为特定类型如“Foo”,编译器现在知道这个方法调用“T”其实是“Foo”类型。...这个对安卓开发者而言尤其重要,因为自从API26(Android7.0)开始,findViewById变成了泛型方法,然后编译器也会正确分析该方法调用返回值。

    88420

    Kotlin 变量、常量和类型

    数据类型 数值类型Kotlin,一切都是一个对象,你可以调用任何变量成员函数和属性。...为了让你愉快地使用引用类型Kotlin 编译器会根据不同场景将其编译成为 Java 基本类型数据还是包装类对象。...对于整数,四种不同大小类型(Byte、Short、Int 和 Long)。 当初始化没有显式类型规范变量时,编译器会自动推断出具有足以表示该值最小范围类型。...在 Kotlin 声明变量,就是在标识符前面加上关键字 var。 变量一旦赋值就不能更改。要声明只读变量,使用 val 关键字。常量一旦初始化后就不能再被修改。...赋值与显式转换 Kotlin 是一种安全语言,对于类型检查非常严格,不同类型数值进行赋值是禁止. Kotlin要想实现这种赋值转换,需要使用转换函数显式转换。

    95510

    Android平台Swift—Kotlin

    以上说明也可以看到JetBrains不仅实力强劲,这家公司对于语言设计更是天然优势。Kotlin是集多家语言之大成。...进行声明,否则会出现编译错误。声明变量为可空后,在运行时便不会抛出异常。 类型智能转换:通过is进行类型判断后,编译器自动进行类型转换。父类引用可以调用子类接口,注意转换只在is代码块中生效。...当Kotlin调用Java代码,Kotlin编译器会对调用Java文件进行分析,以便kt文件能够生成正确class文件。为什么这么说呢?...但是这里要注意一点,如果Java返回集合,不会强制做可空检查,这个是时候如果给不可空引用赋值Java集合null会出现转换错误异常。...[40.png] 多平台项目由三种类型模块组成: ● 公共模块 公用模块只包含与平台无关Kotlin代码以及Kotlin公共标准库代码。同时还包含不含实现平台接口声明

    3.4K90
    领券