sintaxis for companion java classloader kotlin

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