gpt4 book ai didi

java - Kotlin:MyClass::class.java 与 this.javaClass

转载 作者:IT老高 更新时间:2023-10-28 13:29:16 25 4
gpt4 key购买 nike

我正在将一个项目迁移到 Kotlin,这是:

public static Properties provideProperties(String propertiesFileName) {
Properties properties = new Properties();
InputStream inputStream = null;
try {
inputStream = ObjectFactory.class.getClassLoader().getResourceAsStream(propertiesFileName);
properties.load(inputStream);
return properties;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}

现在:

fun provideProperties(propertiesFileName: String): Properties? {
return Properties().apply {
ObjectFactory::class.java.classLoader.getResourceAsStream(propertiesFileName).use { stream ->
load(stream)
}
}
}

非常好,Kotlin! :P

问题是:此方法在 src/main/resources 中查找 .properties 文件。使用:

ObjectFactory::class.java.classLoader...

它有效,但使用:

this.javaClass.classLoader...

classLoadernull...

enter image description here

enter image description here

enter image description here

(注意内存地址也不同)

为什么?

谢谢

最佳答案

如果您在传递给 apply 的 lambda 中调用 javaClass ,它在该 lambda 的 隐式接收器 上调用。由于 apply 将其自己的接收器(在本例中为 Properties() )转换为 lambda 的隐式接收器,因此您实际上获得了 Properties 的 Java 类 您创建的对象。这当然不同于您使用 ObjectFactory::class.java 获得的 Java 类 ObjectFactory

关于隐式接收器如何在 Kotlin 中工作的详细说明,您可以阅读 this spec document .

关于java - Kotlin:MyClass::class.java 与 this.javaClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42571324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com