¿Cómo se especifican los parameters de tipo para el constructor principal en Kotlin?

En Java puedo hacer algo como esto:

import java.util.List; import java.util.Map; class Foo { public final String s; // Parameters to constructor are generic, but constrained public <K> Foo(List<K> list, Map<K, String> map) { // Compute something from those parameters where result // has type independent of input type parameters. StringBuilder sb = new StringBuilder(); for (K k : list) { sb.append(map.get(k)); } s = sb.toString(); } } 

Tenga en count que la class Foo no tiene parameters de tipo, pero su constructor tiene parameters de tipo. ¿Se puede hacer algo equivalente en Kotlin?

Kotlin no admite parameters de tipo para los constructores, por lo que puede definir una function de fábrica en su lugar:

 class Foo private constructor(val s: String) { companion object { fun <K> create(list: List<K>, map: Map<K, String>) = Foo(list.map { map[it] }.joinToString("")) } } 

En Java

 public class Bar<K,V> { public final int x; public Bar(Map<K, V> map) { x = map.hashCode(); } } 

equivalente en Kotlin

 class Bar <K,V> constructor (map: Map<K,V>) { val x = map.hashCode() } 

En Java

 public class Bar { public final int x; public Bar(Map map) { x = map.hashCode(); } } 

equivalente en Kotlin

 class Bar constructor (map: Map<*, *>) { val x = map.hashCode() } 

En Java

 public class Bar { public final int x; public <K, V>Bar(Map<K, V> map) { x = map.hashCode(); } } 

equivalente en Kotlin

 // no way to do so 

De acuerdo con Kotlin garmmer , no existe un equivalente en la implementación en Kotlin porque no podemos definir Parámetros de Tipo en el constructor primario ni secundario.

  • La versión de lanzamiento de Gradle falló con Gradle 3.3
  • Crear una class genérica con una matriz de tipo Comparable <T> en kotlin?
  • ¿Cómo implementar un constructor de validation en Kotlin?
  • No se muestran las aplicaciones resueltas por Intenciones con "EXTRA_INITIAL_INTENTS" adicionales
  • Prueba de unidad de complemento IDEA Intellij (dependencies de proyecto de testing)
  • Anulación accidental: las siguientes declaraciones tienen la misma firma de JVM
  • Cómo declarar varias properties en una línea
  • Kotlin: ambigüedad de resolución de sobrecarga en Eclipse, pero no en IntelliJ
  • Kotlin crea un resultado de consulta para analizar repositorys de Github
  • Acceder a las properties de la class adjunta
  • El layout SwitchPreference no es correcto hasta que se toca