Kotlin Intent 语法错误

Posted

技术标签:

【中文标题】Kotlin Intent 语法错误【英文标题】:Kotlin Intent syntax error 【发布时间】:2018-08-16 20:22:57 【问题描述】:

我试图在 android Studio 的 Kotlin 中设置 Intent 以启动另一个 Activity.kt

val i : Intent = Intent(this, MainActivity::class.java)

Android Studio 显示错误,但无法编译:

Error:(23, 26) None of the following functions can be called with the arguments supplied: 
public constructor Intent(p0: Context!, p1: Class<*>!) defined in android.content.Intent 
public constructor Intent(p0: String!, p1: Uri!) defined in android.content.Intent

我认为语法是正确的,那么有什么问题呢?

【问题讨论】:

Context类型的'this`? 这行代码写在哪里?在女巫课上?在一个方法中?这是***声明?请不要复制整个班级,而是复制相关部分。 我发现错误 - this@MainActivity 是正确的 val i = Intent(this@MainActivity, Activity::class.java) 【参考方案1】:

val i = Intent(this@MainActivity, Activity::class.java)

【讨论】:

感谢@kamilp +1 为工作溶胶。但是您能否解释一下为什么我们需要在语句末尾附加.java @Ravi Vaniya 从我看到的 .java 文件中是一个来自文件 JvmClassMapping.kt 的 kotlin 方法。 /** * 返回与给定 [KClass] 实例对应的 Java [Class] 实例。 */ '@Suppress("UPPER_BOUND_VIOLATED") public val KClass.java: Class @JvmName("getJavaClass") get() = (this as ClassBasedDeclarationContainer).jClass as Class'所以,可能 Intent 需要一个 java 类,而不是 kotlin 类。 好的好的,知道了。谢谢@kamilp【参考方案2】:

您应该按如下方式使用包上下文:

val intent = Intent(this@LoginActivity,MainActivity::class.java)
           startActivity(intent)

谢谢。

【讨论】:

【参考方案3】:

你应该这样写: val i : Intent by lazy Intent(this, MainActivity::class.java)

【讨论】:

这将给出与原始问题完全相同的编译错误。你的回答并没有真正的帮助。 是的,如果this 不是Context 的实例

以上是关于Kotlin Intent 语法错误的主要内容,如果未能解决你的问题,请参考以下文章

Android:Kotlin详细入门学习指南-函数-基础语法

Android:Kotlin详细入门学习指南-高阶函数-基础语法

Android:Kotlin详细入门学习指南-高阶函数-基础语法

Android:Kotlin详细入门学习指南-类和对象(上)-基础语法

Android:Kotlin详细入门学习指南-类和对象(下)-基础语法

Kotlin VS Java:基本语法差异