Контекстуальная ясность: Если значение “authentication” используется только в нескольких местах и его смысл очевиден из контекста, вынесение в константу может быть излишним и даже увеличить сложность восприятия кода.

@Deprecated("Use HttpClient.newHttpClient instead")
fun newHttpClient(baseUrl: String, options: Map<String, Any>): CloseableHttpClient {
  val builder = HttpClients.custom().useSystemProperties()
    .setRetryStrategy(DefaultHttpRequestRetryStrategy(5, TimeValue.ofMilliseconds(3000)))
 
  when {
    options["authentication"] is Auth -> {
      when (val auth = options["authentication"] as Auth) {
        is Auth.BasicAuthentication -> basicAuth(baseUrl, auth.username, auth.password, builder)
        is Auth.BearerAuthentication -> {
          builder.setDefaultHeaders(listOf(BasicHeader(auth.headerName, "Bearer " + auth.token)))
        }
        else -> {}
      }
    }
    options["authentication"] is List<*> -> {
      val authentication = options["authentication"] as List<*>
      when (val scheme = authentication.first().toString().toLowerCase()) {
        "basic" -> {
          if (authentication.size > 2) {
            basicAuth(baseUrl, authentication[1].toString(), authentication[2].toString(), builder)
          } else {
            logger.warn { "Basic authentication requires a username and password, ignoring." }
          }
        }
        else -> logger.warn { "Only supports basic authentication, got '$scheme', ignoring." }
      }
    }
    options.containsKey("authentication") -> {
      logger.warn { "Authentication options needs to be a Auth class or a list of values, " +
        "got '${options["authentication"]}', ignoring." }
    }
  }
 
  return builder.build()
}

developmentprinciplecleancode