为什么 Kotlin 允许在不同文件夹中拥有两个具有相同名称和包的类(即:main 和 androidTest)?

Mig*_*sma 5 android kotlin android-espresso

我发现在 Kotlin 中,可以在同一个包中拥有两个同名的类,但其中一个类位于 androidTest 文件夹中,并且在运行 Espresso 测试时,将使用这个类。这在 Java 下是不可能的,我想知道这是有意的行为还是由于其他原因。

在此输入图像描述

图中,AppCollaborator,在Kotlin中存在于androidTest和main中,AS没有抱怨,但它对JavaCollaborator有抱怨。

事实上,这种行为对于在测试期间加倍某些类(API 等)非常有用,但我不知道我是否可以依赖它。

gue*_*ter 2

这是支持的,因为在输出构建文件夹中你有不同的子文件夹,例如

  • 构建/类/java/main
  • 构建/类/java/测试
  • 构建/kotlin-classes/main

您的类文件存储在不同的目标文件夹中,但在运行时它们具有相同的完全限定名称,因为包和类名称相同。

这不是 kotlin 问题。这是正常的名称冲突。避免在测试和实施中使用相同的名称。通常测试已Test附加到其名称后。在你的情况下:JavaCollaboratorTest