繁体   English   中英

Kotlin:MyClass :: class.java vs this.javaClass

[英]Kotlin: MyClass::class.java vs this.javaClass

我正在将项目迁移到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 ...

在此输入图像描述

在此输入图像描述

在此输入图像描述

(注意内存地址也不同)

为什么?

谢谢

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

有关隐式接收器如何在Kotlin中工作的非常详尽的解释,您可以阅读此规范文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM