当前位置: 首页 > 知识库问答 >
问题:

如何在静态编程语言中强制执行空的非空字符串?

戚学
2023-03-14

我经常想保存一个不能为空或空白的字符串 - 空格不够好。编译器很好地处理字符串?以防止空值,我们可以使用“不可ullString”是“NullOrBlank”()来检查它是空的还是空白的。但是,这要求在使用它的所有位置处理空白检查,然后在空白时处理错误,如果错过了某个位置,这可能会导致意外错误。

是否有一种更简单的方法来定义String的类型或扩展名,以强制字符串不能为空?

共有1个答案

杜炫明
2023-03-14

如果您在多个地方需要此行为,您可以创建一个委托来处理它,您可以在私有属性的setter或setValue函数中进行检查:

class NonEmptyString(private var str: String) {
    init {
        if (str.isEmpty()) {
            throw IllegalArgumentException("Invalid initial value")
        }
    }

    operator fun getValue(thisRef: Any?, property: KProperty<*>) = str

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
        if (value.isEmpty()) {
            return // or throw or something
        }
        str = value
    }
}

其用法如下:

var nonEmpty by NonEmptyString("something")
nonEmpty = ""
println(nonEmpty) // "something"
 类似资料:
  • 问题内容: 我们的REST API接收一些JSON对象输入,其中某些字段必须不为null。这些可以是String / Integer,甚至可以是其他一些类实例作为参考。 我们正在尝试寻找一种方法来强制这些字段不为null,而不是在API中进行null检查的正确方法。当前: 我们想要的是这样的: 我们尝试了3件事: 1)升级到杰克逊2.0.6并使用注释com.fasterxml.jackson.an

  • 抱歉,我在谷歌搜索中找不到答案...在kotlin中运行bash命令的语法是什么?我想做一个curl命令。那里的留档似乎非常有限,或者我不擅长谷歌搜索?

  • 我们的REST API接收一些JSON对象输入,其中一些字段要求为非空。这些可以是String/Intger,甚至可能是其他一些类实例作为引用。 我们试图找到一种方法来强制这些字段不为null,而不是API中null检查的正确方法。当前: 我们想要的是: 我们尝试了3件事: 1) 升级至jackson 2.0.6并使用annotation com。fasterxml。杰克逊。注释。JsonProp

  • 在java中可以这样做//CHECKSTYLE: OFF这将关闭声纳中的检查样式警告。 此外,您可以更具体地在某一行前面使用@SuppressWarnings(“弃用”)。 我知道如果警告是固定的而不是抑制的会更好。Bot如何在静态编程语言中抑制? 我发现一些博客建议使用@Suppress(“某种类型”),但sonar仍然报告了这个问题。 有什么建议吗?

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 当使用Java和JUnit 5时,我可以使用如下非静态字段注册扩展: 当我尝试使用Kotlin (1.4.10)时,我似乎无法让它工作。我试过举个例子: 但它失败了: 当我试着运行它的时候。 如果我尝试添加一个< code>@JvmField注释: 它失败,而是出现编译时错误: 我能做的是将它移动到一个同伴对象: 现在它可以工作了。但是我不能在伴随对象中声明,因为构造函数的输入()还不可用。我只是