title: Why do we use "companion object" as a kind of replacement for Java static fields in Kotlin?
body: <p>What is the intended meaning of "companion object"? So far I have been using it just to replace Java's <code>static</code> when I need it. </p>
  
  <p>I am confused with:</p>
  
  <ul>
  <li>Why is it called "companion"?</li>
  <li>Does it mean that to create multiple <em>static</em> properties, I have to group it together inside <code>companion object</code> block?</li>
  <li>To instantly create a singleton instance that is scoped to a class, I often write</li>
  </ul>
  
  <p>:</p>
  
  <pre><code>companion object {
      val singleton by lazy { ... }
  }
  </code></pre>
  
  <p>which seems like an unidiomatic way of doing it. What's the better way?</p>