Instatiation Object For Java Class Devolviendo El yo no funciona Kotlin -- generics campo con kotlin campo con couchbase campo con type-inference campo con testcontainers camp Relacionados El problema

object instatiation for java class returning SELF is not working kotlin


5
vote

problema

Español

Tengo una clase de java

  public class CouchbaseContainer<SELF extends CouchbaseContainer<SELF>>   

Cuando intento crear un objeto para esto en Kotlin

  val couchbase = CouchbaseContainer()   

Kotlin está lanzando error

Falló la inferencia de tipo: no hay suficiente información para inferir el parámetro Self En Constructor CouchbaseContainer! & GT; (). PleasePeApeFecife Explicity

Pero soy capaz de crear este objeto en Java como se muestra a continuación:

  CouchbaseContainer couchbase = new CouchbaseContainer();   
Original en ingles

I have a java class

public class CouchbaseContainer<SELF extends CouchbaseContainer<SELF>> 

when i try to create object for this in kotlin

val couchbase = CouchbaseContainer() 

Kotlin is throwing error

Type inference failed: Not enough information to infer parameter SELF in constructor CouchbaseContainer!> (). Pleasespecify it explicity

but i am able to create this object in Java as shown below :

CouchbaseContainer couchbase = new CouchbaseContainer(); 
              

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

El problema es que en Java ByTecode no hay concepto de genéricos (llamado Tipo de borrado ), por lo que su tipo SELF no aparecerá en el código byteCode. Es por eso que en Java se le permite crear una instancia sin especificar el valor real de SELF .

Sin embargo, en Kotlin, sin embargo, supongo que el compilador ve que CouchbaseContainer es genérico y requiere que proporcione el valor real class KCouchbaseContainer : CouchbaseContainer<KCouchbaseContainer>() val couchbase = KCouchbaseContainer() 63 . De hecho, el mensaje de error es algo así:

Falló la inferencia de tipo: no hay suficiente información para inferir el parámetro T en

  constructor Foo<T : Any!>  ( )   

Por favor, especifíquelo explícitamente.

Además, tenga en cuenta que si el tipo se puede inferir (por ejemplo, porque lo pasa a través del constructor), no necesita proporcionarlo, como en el siguiente ejemplo (tomado de documentación ):

  class Box<T>(t: T) {     var value = t }  val box = Box(1) // T is inferred to be Int   
 

The issue is that in Java bytecode there is no concept of generics (called type erasure), so your type SELF will not appear in the bytecode. That's why in Java you're allowed to create an instance without specifying the actual value of SELF.

In Kotlin, though, I guess the compiler sees that CouchbaseContainer is generic and it requires you to provide the actual SELF value. Indeed, the error message is something like:

Type inference failed: Not enough information to infer parameter T in

constructor Foo<T : Any!>  ( ) 

Please specify it explicitly.

Also, note that if the type can be inferred (e.g., because you pass it through the constructor), you don't need to provide it, as in the following example (taken from documentation):

class Box<T>(t: T) {     var value = t }  val box = Box(1) // T is inferred to be Int 
 
 
4
 
vote

Intenta esto:

  class KCouchbaseContainer : CouchbaseContainer<KCouchbaseContainer>() val couchbase = KCouchbaseContainer()   
 

Try this:

class KCouchbaseContainer : CouchbaseContainer<KCouchbaseContainer>() val couchbase = KCouchbaseContainer() 
 
 

Relacionados problema

1  ¿Cómo crear un agrupamiento independiente de Apache Spark para la prueba de integración, usando TestContainers?  ( How to create apache spark standalone cluster for integration testing using te ) 
¿Alguien sabe cómo crear un clúster de Apache-Spark para las pruebas de integración usando TestContainers https: //www.testcontainers. org / Cualquier eje...

0  Excluir Embedded.Mongodb.Enabled para ciertas pruebas  ( Exclude embedded mongodb enabled for certain test ) 
Estoy trabajando aquí en algunas pruebas, empiezo desde la parte inferior, reactiveRePosity y escribió con éxito todas las pruebas necesarias con com.playtik...

1  Datos de datos compartidos de TestContainers  ( Testcontainers shared database ) 
Estoy tratando de tener un solo PostgreSQL TestContainer en Junit 5 que todas mis clases de prueba se extienden. Actualmente, solo se prueban una de mis clase...

1  Inicie un servidor GRPC incorporado mientras ejecuta las pruebas de integración con Springboot  ( Start an embedded grpc server while running integration tests with springboot ) 
He construido una aplicación Springboot que tiene un servidor GRPC como una de sus dependencias. Mientras ejecuta la prueba de integración, soy capaz de usar ...

0  Cómo usar el módulo Dynalite de TestContainers en las pruebas de JUnit 5 y SpringBoot 2.3.1  ( How to use testcontainers dynalite module in junit 5 tests and springboot 2 3 1 ) 
No puedo averiguar cómo usar testcontainers ' DYNALITE Módulo en Una prueba de JUnit 5 para poder probar Amazon Dynamodb, - La documentación es realmente dem...

4  Usando TestContainers en un agente de Docker Jenkins: los contenedores no se inician, NorouTetohostException  ( Using testcontainers in a jenkins docker agent containers fail to start norout ) 
Estoy usando una tubería declarativa Jenkins con los agentes de Docker para construir y probar mi software, incluidas las pruebas de integración de ejecución ...

1  ¿No se puede conectar a una instancia de testcontainer neo4j?  ( Cant connect to a testcontainer neo4j instance ) 
Esta es mi clase de prueba: @Testcontainers @ReactiveDataNeo4jTest internal class RepositoryIT { @Container private val container = KNeo4jContaine...

2  El contenedor REDIS de TestContainer se conecta a un recipiente diferente y luego se define en la prueba  ( Testcontainers redis container connects to a different container then the one d ) 
Estoy haciendo pruebas de integración en mi aplicación de arranque de primavera. La aplicación necesita un Redis para trabajar. Durante la fase de desarroll...

2  Testcontainers, Spring Webflux, Junit 5, MySQLR2DBCDatabaseContainer usando @dynamicpropertysource  ( Testcontainers spring webflux junit 5 mysqlr2dbcdatabasecontainer using dyna ) 
este Bounty ha terminado . Las respuestas a esta pregunta son elegibles para un + 50 recomputación de reputación. El período de gracia de Bount...

1  Cómo agregar argumentos de ejecución dentro de los contenedores de prueba de Docker  ( How to add run arguments within docker test containers ) 
Para la imagen en particular, estoy tratando de ejecutar con contenedores de prueba, se requiere que inicie el contenedor así después de la construcción: d...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos