robstoll
03/11/2018, 12:30 PMobject CoreFactory : ICoreFactory by factory {
private val factory: ICoreFactory
init {
val loader = ServiceLoader.load(ICoreFactory::class.java)
val itr = loader.iterator()
check(itr.hasNext()) {
"Could not find an implementation for ${ICoreFactory::class.java.name}"
}
factory = itr.next()
}
}
orangy
val CoreFactory by lazy {
val loader = ServiceLoader.load(ICoreFactory::class.java)
val itr = loader.iterator()
check(itr.hasNext()) {
"Could not find an implementation for ${ICoreFactory::class.java.name}"
}
itr.next()
}
robstoll
03/11/2018, 12:35 PMorangy
ServiceLoader
implements Iterable
, you might do this:orangy
ServiceLoader.load(ICoreFactory::class.java).firstOrNull() ?: throw IllegalStateException("Could not find an implementation for ${ICoreFactory::class.java.name}")
orangy
singleOrNull
if you want to constraint to only single implementation being availablerobstoll
03/11/2018, 12:43 PM