首页 > 解决方案 > Kotlin:从方法返回泛型类型?

问题描述

我有以下一组课程:

data class ApiResponse<T>(val httpCode: String? = null, val data: T? = null, val status: String? = null, val error: String? = null)

data class Customer(val name: String? = null)

data class User(val userId: String = "", val name: String? = null, val description: String? = null)

基本上,我将使用ApiResponse该类来一般地在字段中存储CustomerUser或有时Map<String, Any?>在字段中存储 a 的实例。data有了这些对象,我写了这个方法:

private fun handleError(errorJson: String?): ApiResponse<Customer> {
        var response: ApiResponse<Customer>
            try {
                response = objectMapper.readValue(errorJson, object: TypeReference<ApiResponse<Customer>>(){})
            } catch (ex: Exception) {
                // unable to parse
                response = ApiResponse(
                        status = "500",
                        error = "Unknown error"
                )
            }
        
        return response
    }

基本上,我的问题是如何使此方法更通用,以便可以将相同的代码用于Customer, User,Map<String, Any?>对象?当我调用此方法时,我会知道预期的返回类型。

标签: javakotlingenericsjackson

解决方案


您正在寻找具体的类型参数:

private inline fun <reified T> handleError(errorJson: String?): ApiResponse<T> {
        var response: ApiResponse<Customer>
            try {
                response = objectMapper.readValue(errorJson, object: TypeReference<ApiResponse<T>>(){})
            } catch (ex: Exception) {
                // unable to parse
                response = ApiResponse(
                        status = "500",
                        error = "Unknown error"
                )
            }
        
        return response
    }

推荐阅读