关于lambda类型变量名称大小写的异常


#1

今天遇到了一个很奇怪的问题,先来个没问题的代码看一下

fun main() {
    val ABC = 1
    val abc = 2
    println(ABC)
}

运行输出:

1

没有任何问题,再来看一个有问题的

fun main() {
    val ABC = { 1 }
    val abc = { 2 }
    println(ABC())
}

这里ABCabc变量都换成了lambda表达式,IDE没有提示异常,但是编译报错如下:

Exception in thread "main" java.lang.NoClassDefFoundError: xxx/TestKt$main$ABC$1 (wrong name: xxx/TestKt$main$abc$1)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at xxx.TestKt.main(ex1.kt:10)
	at xxx.TestKt.main(ex1.kt)

如果把abc改成abd则不会出现问题,改为aBcabC都仍然会抛出异常,kotlinjava不都是大小写敏感的吗,怎么会出现这种问题?


#2

翻了一下历史帖子,发现好像有人提过类似问题了:dog:


#3

Linux就没这些破事儿


京ICP备16022265号-2 Kotlin China 2017 - 2018