我想知道是否有可能在 Java 中“避免”空检查,以这段代码为例:
@Override
public List<AccountBean> search(AccountConstraint... c) {
if (c.length == 0) {
throw new IllegalArgumentException("dao.AccountDAO.search: c.length == 0");
}
try {
List<AccountBean> beans = new ArrayList<>();
for (AccountConstraint ac : c) {
Builder builder = new QueryBuilder.Builder("SELECT * FROM accounts");
if (ac.getAccountId() != null) {
builder.clause("accountId >= " + ac.getAccountId().getMin() + " AND accountId <= " + ac.getAccountId().getMax());
}
if (ac.getUsername() != null) {
builder.clause("username = \"" + ac.getUsername() + "\"");
}
if (ac.getPassword() != null) {
builder.clause("password = \"" + ac.getPassword() + "\"");
}
if (ac.getEmail() != null) {
builder.clause("email = \"" + ac.getEmail() + "\"");
}
PreparedStatement ps = connection.prepareStatement(builder.build().getQuery());
ResultSet rs = ps.executeQuery();
while (rs.next()) {
beans.add(new AccountBean(rs));
}
}
return beans;
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}
它必须检查 4 次,!= null
否则代码将失败。
是否可以将语句转换为仅在没有 NullPointerException时才if (object != null)
执行的单行语句?当出现异常时,应该忽略该行。
我在这里不是在谈论通用语言功能,我说的是只有在您明确决定这样做时才会上交的功能。
例如:NullCheck(builder.clause("username = \"" + ac.getUsername() + "\""));
将是建议代码的片段。
在 Java 中可能有这样的事情吗?
此外,如果不可能,是否可以在 Java 8 中直接在方法中使用方法(voids)?
那么这样的代码实际上可以工作吗?
public static NullCheck(Void void) {
try {
void.execute();
}
catch (NullPointerException e) {
//ignore
}
}
我知道我可以将方法放在它自己的类中,该类扩展具有方法的接口,execute()
然后传递该类,但这会破坏摆脱空检查或任何更复杂的东西的目的。
问候。
警告:我在这里使用 PreparedStatement 的方式很容易发生 SQL 注入。不要重复使用此代码。