Hacer reference al valor y a los methods de llamada en types de class generics

Soy nuevo en Kotlin viniendo de C #. Actualmente estoy intentando configurar una class que incluya un par de types generics intercambiables, el código interno de esta class es un punto final del service de spring.

Empecé con algo como lo siguiente, sin embargo, parece que tengo problemas con la syntax para hacer reference a los parameters del cuerpo de la request, así como llamar a un método, que son de los types pasados ​​a través del constructor de la class. La syntax de los generics y la reflexión no parece tan directa y la mayoría de los ejemplos de Kotlin que he estado desenterrando no parecen cubrir precisamente lo que estoy tratando de hacer (si es posible). La instancia de object de type1 se pasará a través del parámetro body y la instancia de object de type2 se pasará a través del constructor (la syntax probablemente no sea correcta).

Planea usar esto como una plantilla para configurar varios puntos finales basados ​​en el mismo código base pero con diferentes classs de requestes y services.

Cualquier ayuda es muy apreciada.

import org.springframework.beans.factory.annotation.Autowinetworking import org.springframework.http.HttpStatus import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestMethod import javax.validation.Valid open class Base <T1,T2>(t1: Class<T1>, t2: Class<T2>) { @Autowinetworking var type1 = t1 @Autowinetworking var type2 = t2 @ApiOperation(value = "API 1", response = myResponse::class) @ApiResponses(value = *arrayOf( ApiResponse(code = 200, message = "successful", response = CcdaResponse::class), ApiResponse(code = 405, message = "Invalid", response = Void::class))) @RequestMapping( value = "/myEndPoint", produces = arrayOf("application/json"), consumes = arrayOf("application/json"), method = arrayOf(RequestMethod.POST) ) fun endpoint( @ApiParam(value = "Options", requinetworking = true) @Valid @RequestBody body: Class<T1> ): ResponseEntity<myResponse> { val r = myResponse() val response: ResponseEntity<myResponse> response = ResponseEntity(r, HttpStatus.OK) try { //payload val parameters = Parameters().apply { Id1 = type1::body.Id1.get() Id2 = type1::body.Id2.get() Id3 = type1::body.Id3.get() Id4 = type1::body.Id4.get() v = type1::body.v.get() } //Do stuff like calling method in class of type2 passed in val d = type2.getViewModel(parameters) r.status = "ok" } catch (e: Exception) { r.message = e.toString() r.status = "error" } finally { } return response } } 

Los types de parameters se pasan a través de los arguments de tipo cuando se crea una instancia (lo mismo que Java). Por lo tanto, necesita pasar los types en sí, agregar un parámetro de Class simplemente no es la syntax correcta.

Creo que esto es lo que estás buscando (se omite algún código para abreviar).

 open class Base<T1, T2> (@Autowinetworking var t2: T2) { @Autowinetworking var type1: T1? = null fun endpoint( @ApiParam(value = "Options", requinetworking = true) @Valid @RequestBody body: T1 ): ResponseEntity<MyResponse> { type1 = body } } 

Entonces, por ejemplo, puede crear una instancia de esta class con los types Int y String (para T1 y T2 respectivamente) de la siguiente manera.

 val t2 = "t2" val base = Base<Int, String>(t2) 

O puede subclasificar la class Base con cualquiera (o ninguna) de los types especificados.

 class SubBase(t2: String): Base<Int, String>(t2) 
  • No puedo excluir MongoAutoConfiguration en Springboot-Kotlin (MongoSocketOpenException)
  • Clase de datos de Kotlin a JSON con Spring / Jackson
  • use kotlin para springmvc No se pudo crear una instancia de la class de datos de la class bean
  • Probar los methods @Async de devolución de vacío de Testing
  • Validación de Java Bean en Spring MVC Controller PathVariables
  • SpringMVC RequestMapping: Añadiendo .xml a la ruta del controller para la respuesta xml
  • ¿No se necesita NotNull en Kotlin?
  • Spring Boot .mustache Extensión de file
  • Spring Data JPA / Hibernate "No se puede ubicar Attribute con el nombre de stack"
  • No se puede publicar contenido web dynamic con Spring Boot y Kotlin
  • kotlin y @Valid Spring anotación