regarding a large codebase needing good java interop, thoughts on the function signature
class ConvertedOldModelObject private constructor(oldCtorArg: OldJavaDomainType, ...) {
//...
companion object {
@JvmStatic @JvmName("create") operator fun invoke(oldCtorArg: OldJavaDomainType, ...) {
//some caching logic to try to avoid hanging on to allocaitons, a kind of poor mans constant pool
return CovertedOldModelObject(oldCtorArg, cachedArgs, ...)
}
}
}
pros:
• I get
OldJavaDomainType oldThing = OldJavaDomainType.create(args...)
from java
• I get
val x = OldJavaDomainType(args...)
from kotlin
cons:
•
companion object operator fun invoke
seems like a kind of nifty hack, not sure how somebody else would feel stumbling across it
• reasonable alternatives like simply offering a global function for kotlin and a simpler
fun create()
method for java seems sufficient, though slightly bloatier