Ссылка на значения и методы вызова в типах общих типов

Я новичок в Kotlin из C #. В настоящее время я пытаюсь настроить класс, который принимает несколько взаимозаменяемых типов, внутренний код этого класса является конечной точкой службы.

Я начал с чего-то вроде ниже, однако у меня, похоже, возникают проблемы с синтаксисом, чтобы ссылаться на параметры тела запроса, а также на вызов метода, который относится к типам, переданным через конструктор класса. Синтаксис дженериков и рефлексии не кажется, что прямое и большинство примеров Котлина, которые я копаю, по-видимому, не охватывают именно то, что я пытаюсь сделать (если возможно). Экземпляр объекта type1 будет передан через параметр body, а экземпляр объекта type2 должен быть передан через конструктор (синтаксис, вероятно, неверен).

Планирование использовать это как шаблон для настройки нескольких конечных точек на основе одного и того же базового кода, но с разными классами запросов и сервисов.

Любая помощь приветствуется.

import org.springframework.beans.factory.annotation.Autowired 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>) { @Autowired var type1 = t1 @Autowired 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", required = 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 } } 

Типы параметров передаются через аргументы типа при создании экземпляра (аналогично Java). Таким образом, вам нужно передать сами типы, добавив параметр Class это не правильный синтаксис.

Я считаю, что это то, что вы ищете (для краткости опущен некоторый код).

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

Затем, например, вы можете создать экземпляр этого класса с типами Int и String (для T1 и T2 соответственно) следующим образом.

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

Или вы можете подклассифицировать Base класс любым (или ничем) из указанных типов.

 class SubBase(t2: String): Base<Int, String>(t2) 
Intereting Posts
Как вернуть интерфейс, например, javawith Kotlin Как получить завершение кода IntelliJ IDEA для импорта статических методов Java в качестве функций верхнего уровня Kotlin? ошибка при использовании «npm start» с приложением, созданным «create-react-kotlin-app» Android Kotlin – отправлять уведомления каждую минуту Robolectric addResolveInfoForIntent не работает Инициализация поля, которое имеет геттер и сеттер? kotlin обратное булево безопасное литье Невозможно сделать работу hot.dev + kotlin + gradle hot redeploy Kotlin – Ошибка: не удалось найти или загрузить основной класс _DefaultPackage Как представлять теги веб-компонентов в инфраструктурах Kotlin html? как управлять потоком данных, используя, когда правильно в котлин getActivity () / context в ViewHolder в Котлин-Андориде Дженкинс град строит неудачу из-за приложения: compileDebugKotlin Kotlin: параметр типа Reified делает Gson неудачным Существует ли эквивалент Котлина для библиотеки AssertJ?