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

在这里输入图像描述

在这里输入图像描述

在这里输入图像描述

(注意内存地址也不同)

为什么?

谢谢

One Solution collect form web for “Kotlin:MyClass :: class.java vs this.javaClass”

如果您调用传递给apply的lambda中的javaClass在该lambda的隐式接收方上调用它。 由于apply将自己的接收器(在这种情况下是Properties() )转换为lambda的隐式接收器,所以您实际上正在获取已创建的Properties对象的Java类。 这与使用ObjectFactory::class.java获得的ObjectFactory的Java类完全不同。

有关隐式接收器如何在Kotlin中工作的非常全面的解释,您可以阅读这个规范文档 。

  • 未解决的参考:Kotlin中的findViewById
  • 我如何强制调用一些构造函数/函数来使用命名参数?
  • 在Kotlin中动态获取函数名称
  • Android Studio在构建Kotlin项目时报告“无法识别启动活动:找不到默认活动”
  • 如何创建一个数据类实现Spring Secuirty特定的UserDetails
  • Android Kotlin将项目添加到来自微调的ListView
  • Android Studio执行失败的任务compilefreeDebugKotlin
  • Kotlin中的一个类和一个对象之间的区别
  • Recyclerview查看共享状态
  • Gradle上的Android应用程序:无法合并dex
  • 错误的“this”被用在嵌套闭包中
  • Kotlin language will be the best programming language for Android.