java - for - public function kotlin
Kotlin: MyClass:: class.java vs this.javaClass (1)
Si invoca javaClass
dentro de un lambda pasado para apply
, se llama al receptor implícito de ese lambda. Dado que la apply
convierte su propio receptor ( Properties()
en este caso) en el receptor implícito de la lambda, está obteniendo efectivamente la clase Java del objeto Properties
que ha creado. Por supuesto, esto es diferente de la clase Java de ObjectFactory
que está obteniendo con ObjectFactory::class.java
.
Para obtener una explicación muy detallada de cómo funcionan los receptores implícitos en Kotlin, puede leer este documento de especificaciones .
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 bien, Kotlin! :PAG
La pregunta es: este método busca un archivo .properties
dentro de src/main/resources
. Utilizando:
ObjectFactory::class.java.classLoader...
funciona, pero utilizando:
this.javaClass.classLoader...
classLoader
es null
...
(Tenga en cuenta que la dirección de memoria también es diferente)
¿Por qué?
Gracias