将 SSLContext 从 Java 转换为 Kotlin

Conversion of SSLContext from Java to Kotlin

我试图在使用 Kotlin 的 android 应用程序中复制这个自签名证书过程(link:https://www.baeldung.com/okhttp-self-signed-cert)。问题是我在 Java 中提供的 link 中的实现,我似乎无法将此代码正确转换为其 Kotlin 版本。

sslContext.init(null, new TrustManager[] { TRUST_ALL_CERTS }, new java.security.SecureRandom());

我在 Kotlin 中是这样实现的:

val sslContext: SSLContext = SSLContext.getInstance("SSL")
.init(null, arrayOf(TRUST_ALL_CERTS) as Array<TrustManager>,
    java.security.SecureRandom()) as SSLContext

我将 init 转换为 SSLContext,因为它在 Unit 中,但在这样做之后,出现此警告:

this cast can never succeed

这个问题的替代修复方法是什么?理论上一发布就会报错,想避免。请帮忙。谢谢

注意:我无法在本地计算机上测试我的应用程序,因为该应用程序与不允许该应用程序在本地 运行 的服务器进行通信。

SSLContext.init() 正在返回 void(或 Kotlin 中的 Unit),因此您基本上是在尝试将 Unit 转换为 SSLContext,这永远不会成功

你应该像这样分开语句:

val sslContext: SSLContext = SSLContext.getInstance("SSL")
sslContext.init(null, arrayOf(TRUST_ALL_CERTS) as Array<TrustManager>,
    java.security.SecureRandom())

要自动执行此操作,请使用 apply

val sslContext: SSLContext = SSLContext.getInstance("SSL").apply {
  init(null, arrayOf<TrustManager>(TRUST_ALL_CERTS), java.security.SecureRandom())
}