将通用类型传递给嵌套密封 class
passing a generic type to a nested sealed class
可能吗?
我如何向编译器解释它的相同类型 (BR) 扩展了相同的 class?
下面的代码失败
class BaseRepository<BR: BaseResponse>() {
sealed class BaseSealedResponse {
open class Success(val receivedValue: BR)
open class RequestError(val error: HttpException)
}
}
不,那不可能。只有 inner
classes 可以引用外部类型的类型参数。一个sealed
class不能标记为inner
,所以它只能访问自己的类型参数:
class BaseRepository<BR: BaseResponse>() {
sealed class BaseSealedResponse {
open class Success<B: BaseResponse>(val receivedValue: B)
open class RequestError(val error: HttpException)
}
}
您可以在 BaseRepository
中定义一个成员函数,它创建 Success
的实例,参数化为 BR
:
fun Success(receivedValue: BR) = BaseSealedResponse.Success(receivedValue)
可能吗? 我如何向编译器解释它的相同类型 (BR) 扩展了相同的 class? 下面的代码失败
class BaseRepository<BR: BaseResponse>() {
sealed class BaseSealedResponse {
open class Success(val receivedValue: BR)
open class RequestError(val error: HttpException)
}
}
不,那不可能。只有 inner
classes 可以引用外部类型的类型参数。一个sealed
class不能标记为inner
,所以它只能访问自己的类型参数:
class BaseRepository<BR: BaseResponse>() {
sealed class BaseSealedResponse {
open class Success<B: BaseResponse>(val receivedValue: B)
open class RequestError(val error: HttpException)
}
}
您可以在 BaseRepository
中定义一个成员函数,它创建 Success
的实例,参数化为 BR
:
fun Success(receivedValue: BR) = BaseSealedResponse.Success(receivedValue)