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

Estoy migrando un proyecto a Kotlin, y esto:

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; } 

es ahora:

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

muy agradable, Kotlin! :PAG

La pregunta es: este método busca un file .properties dentro de src/main/resources . Utilizando:

 ObjectFactory::class.java.classLoader... 

funciona, pero usando:

 this.javaClass.classLoader... 

classLoader es null

enter image description here

enter image description here

enter image description here

(Tenga en count que la dirección de memory también es diferente)

¿Por qué?

Gracias

Si javaClass dentro de una lambda pasada para apply , se invoca en el receptor implícito de esa lambda. Como apply convierte su propio receptor ( Properties() en este caso) en el receptor implícito de la lambda, efectivamente está obteniendo la class Java del object Properties que ha creado. Esto es, por supuesto, diferente de la class Java de ObjectFactory que ObjectFactory::class.java con ObjectFactory::class.java .

Para una explicación muy completa de cómo funcionan los receptores implícitos en Kotlin, puede leer este documento de especificación .

  • ¿Lee el valor de la anotación de la function de Kotlin usando la reflexión?
  • Acceda a Integer.class desde Kotlin
  • Deserializar un campo que puede ser uno de dos types de datos utilizando Moshi
  • Kotlin Kapt: java.lang.IllegalStateException: endPosTable ya está configurado
  • Extender class de datos en Kotlin
  • Desarrollo de complementos Intellij IDEA. Acción "crear class kotlin"
  • Android Studio 2.2 no puede encontrar references para todos los files de kotlin
  • rx.Scheduler no se puede proporcionar sin un método @ Provides- o @ Produces-anotado
  • Kotlin: ¿cómo hacer una propiedad delegada por map con un nombre personalizado?
  • cómo get Array json en kotlin desde url
  • RuntimeException si minifyEnabled es verdadero con la class ViewModel