java - 如何快速找到多个字符串中为空或为空的字符串
问题描述
我有几个字符串,如 id、name、age 等,我想检查以确保它们不为空或 null,如果为空或 null,则抛出异常并显示错误消息,例如:“id can not为空或 null"
这就是我现在正在做的事情,但是如果第一个 if 条件正确,我需要一个一个地检查它们,有没有办法让代码变得简单和容易?
if((StringUtils.isNotEmpty(id) && StringUtils.isNotEmpty(name) && StringUtils.isNotEmpty(age)) == false) {
if(StringUtils.isNotEmpty(id) == false) {
throw Exception("...")
}
else if(StringUtils.isNotEmpty(name) == false) {
throw Exception("...")
}
..
}
解决方案
这些双重否定确实会对代码的可读性产生负面影响。例如if(StringUtils.isNotEmpty(id) == false)
,可以轻松替换为id.isEmpty()
. 应用这将转化为:
public void verify() throws IllegalStateException {
if(name == null || id == null)
throw new IllegalStateException("not initialized");
if(name.isEmpty())
throw new IllegalStateException("name is empty");
if(id.isEmpty())
throw new IllegalStateException("id is empty");
}
如果任何字符串为空,另一种方法是仅抛出错误:
public void verify() throws IllegalStateException {
if(isEmpty())
throw new IllegalStateException("object was empty: " + toString());
}
private boolean isEmpty() {
return id.isEmpty() || name.isEmpty();
}
@Override
public String toString() {
StringBuilder str = new StringBuilder("Person{");
str.append("id: " + id + " ");
str.append("name: " + name + " ");
str.append("}");
return str.toString();
}
现在,如果抛出错误,您可以检查哪个变量负责它(如果您愿意)。
也就是说,最好的解决方案是重新设计您的对象结构。使用您自己的书面课程时,测试null
不应该是一件事情。少数理由之一是在使用低级 API 时,但在相应的函数调用之外永远不应该看到所有 null 的东西。你的函数不应该返回 null ,反过来,期望 null 作为参数或使用 null 作为检查某些东西的值。Null 表示程序员错误(例如,函数调用不正确),即程序中的缺陷。因此, NullPointerException 将作为未经检查的异常抛出。所以在大多数情况下,当 null 作为参数给出时,不要处理这种情况。
要考虑的另一件事是,当您使用 setter 时,这种验证方法可能是多余的。始终保持您的成员变量处于有效状态。例如,没有年龄和身份(应该自动给出),一个真实的人就无法存在。因此,如果您真的想检查输入是否为空并抛出错误,我建议:
class Person {
private String id, name, age;
public Person(String name, String age) {
if(name.isEmpty() || age.isEmpty())
throw new IllegalStateException("name and age cannot be empty!");
this.id = UUID.randomUUID().toString();
this.name = name;
this.age = age;
}
public void setName(String name) {
if(name.isEmpty())
throw new IllegalStateException("name cannot be empty!");
else
this.name = name;
}
public void setAge(String age) {
if(age.isEmpty())
throw new IllegalStateException("age cannot be empty!");
else
this.age = age;
}
}
这是基于“id、name、age”是类的成员变量的想法。
推荐阅读
- jenkins - Bazel 远程缓存分析数据
- azure-devops - 如何在 VSTS 中发送包含上次构建交付的工作项的 html 电子邮件?
- amazon-web-services - 无法使用 terraform 创建带有版本控制的 s3 存储桶
- javascript - 我的 html 表格的分页没有显示
- javascript - 如何使用 text() 查找元素
- swift - 如何从数组中获取第二高的数字?
- javascript - 按钮标签等于它的 id
- python - OpenCV 错误:在跟踪器对象上调用更新方法时断言失败
- angular - Angular SyntaxError:位置 0 处 JSON 中的意外标记 P
- excel - 为什么 Addon XLSX 不适用于我系统中的以下代码?