Haha 😄
Give me an example of where it leads to pain?
So far I've been using companion objects and the companion object would contain all the methods I need.
A getInstance method would simply check if an instance is available, if not, create one.
@Autowired
in Spring pretty much follows the same pattern, instantiate it when it's needed.