这是垃圾 Kotlin 的新特性吗?


#1


#2

这个问题不仅仅是Kotlin有,Java也有这个问题,应该是类装载器不区分大小写造成的


#3

这应该是java类加载器对类名的约定,你看它是故意把ABC按照Abc加载的。

你可以用同样的代码放到js 或native下运行看看


#4

所以这是辣鸡java的特性


#5

我觉得不是,编译出来只有名为 Abc.class 里面却装着 ABC 的类文件


#6

所以应该是垃圾 Kotlin 的 Bug


#7

image
look


#8

那你去youtrack提个issue吧


#9

你可以试试把两个类名的顺序换一下,就会得到相反的情况,所以这个是编译器对类名的限制,就像你在Windows同个目录下,无法创建大小写差别的同名文件,比如a.txt和A.txt会被认为是同一个文件。而且这个不仅仅是Kotlin中有这个问题,Java也有这样的问题


#10

这个要提醒你一点,这个其实不是Kotlin或者Java的问题,而是Windows的问题,因为在Windows中,文件名不区分大小写,在编译生成class文件的时候,先编译的那个类生成了类名的class文件(假如是Abc.class),后面编译的类,生成第二个类的class文件(ABC.class,这是理论上,实际上Windows文件名不区分大小写,会认为ABC.class文件已经存在,也就是ABC.class),所以会将ABC类的编译后写进了ABC.class文件中,你可以尝试在Linux中编译,将不会有你说的这个问题。以下是在Linux上执行的结果:

代码:
111111

执行结果(并不会报错):
2222222


#11

厉害了,看来mac也是会报错的,mac默认也不分大小写


#12

的确,了解了


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