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) 
  • Spring Boot .mustache Extensión de file
  • Excepción de puntero nulo en Spring Proxy Class y Kotlin
  • SpringMVC RequestMapping: Añadiendo .xml a la ruta del controller para la respuesta xml
  • No se puede conectar a Remote Mongo DB mediante Springboot
  • kotlin y @Valid Spring anotación
  • Tenga la security de que multiparte es nulo en el controller de descanso
  • Probar los methods @Async de devolución de vacío de Testing
  • Integración de HTML y CSS con Kotlin y Spring MVC
  • cómo cargar config en spring-webflux sin spring-boot?
  • Validación de Java Bean en Spring MVC Controller PathVariables
  • Clase de datos de Kotlin a JSON con Spring / Jackson