could even be placed in companion object