title: Kotlin declaration signature clash?
body: <p>I know this has been asked before but the solutions given do not apply here.</p>
  
  <p>The code in question is a simple class:</p>
  
  <pre><code>class BitString(bits: List&lt;Bit&gt;) {
      constructor(bits: List&lt;Number&gt;): this(bits.map(::Bit))
      constructor(bits: List&lt;Boolean&gt;): this(bits.map(::Bit))
  
      var bits = bits
  
  }
  </code></pre>
  
  <p><code>Bit</code> is a class implemented by me.</p>
  
  <p>However I get the familiar:</p>
  
  <pre><code>Platform declaration clash: The following declarations have the same JVM signature (&lt;init&gt;(Ljava/util/List;)V):
      constructor BitString(bits: List&lt;Bit&gt;) defined in BitString
      constructor BitString(bits: List&lt;Boolean&gt;) defined in BitString
      constructor BitString(bits: List&lt;Number&gt;) defined in BitString
  </code></pre>
  
  <p>My guess is that the generated bytecode does not differentiate between the different specialized lists, which seems like something that should be a priority to fix but... apparently it's not.</p>
  
  <p>My question is how should I get this code to work and preferably look nice? The point is that it should take a <code>List</code> of either <code>Bit</code>, <code>Number</code> or <code>Boolean</code> so the class can be constructed from a wide range of collections.</p>