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 .

  • ¿Puedo usar ClosedRange <T> en hibernación?
  • Cómo llamar a la function de Javascript desde el código de Kotlin?
  • ¿Cómo puedo configurar FlexBox.alignItems para flex_end programáticamente?
  • No se puede 'observar en' hilo principal con RxKotlin
  • Usar un Flux en lugar de un bucle for, ¿algún beneficio?
  • ¿Es posible devolver el mismo tipo que el parámetro de tipo en la instrucción when
  • ¿Qué significa el tipo de devolución de Vacío en Kotlin?
  • Comunicación de extensión Kotlin-android entre classs similar a la comunicación con otros fragments
  • Cómo importar packages Java en Kotlin Native
  • Anular getter para la class de datos de Kotlin
  • RxAndroid - Manejar errores con el operador Zip