当无法使用null对象时,更换条件运算符null-checks样板的最佳做法是:
public String getEmployeeName() {
return nullable(employee, employee -> employee.getName());
}
private <T, R> R nullable(T nullable, Function<T, R> doIfNotNull) {
return nullable == null ? null : doIfNotNull.apply(nullable);
}
在Java 8或任何实用程序库中是否有类似下面的内容?
<?php
require_once 'DB_Functions.php';
$db = new DB_Functions();
// json response array
$response = array("error" => false);
if (!empty($_POST['fname']) && !empty($_POST['lname']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['mobile'])){
// receiving the post params
$fname = trim($_POST['fname']);
$lname = trim($_POST['lname']);
$email = trim($_POST['email']);
$password = $_POST['password'];
$mobile = trim($_POST['mobile']);
// validate your email address
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
// valid email address
if ($db->isUserExisted($email)) {
// user already existed
$response["error"] = true;
$response["error_msg"] = "User already existed with " . $email;
echo json_encode($response);
} else {
// create a new user
$user = $db->storeUser($fname, $lname, $email, $password, $mobile);
if ($user) {
// user stored successfully
$response["error"] = false;
$response["uid"] = $user["id"];
$response["user"]["fname"] = $user["fname"];
$response["user"]["lname"] = $user["lname"];
$response["user"]["email"] = $user["email"];
$response["user"]["created_at"] = $user["created_at"];
$response["user"]["updated_at"] = $user["updated_at"];
echo json_encode($response);
} else {
// user failed to store
$response["error"] = true;
$response["error_msg"] = "Unknown error occurred in registration!";
echo json_encode($response);
}
}
} else {
// invalid email address
$response["error"] = true;
$response["error_msg"] = "invalid email address";
echo json_encode($response);
}
} else {
$response["error"] = true;
$response["error_msg"] = "Required parameters are missing!";
echo json_encode($response);
}
?>
答案 0 :(得分:5)
我发现return employee == null ? null : employee.getName();
是最具可读性的,所以也许它是更好的解决方案,而不仅仅是让你的代码过于复杂。它完成了工作,并没有任何问题 - 所以不妨使用它。这就是条件运算符的用途。
通常在尝试决定使用哪种编程模式时,最好使用最易读且最容易让代码的维护者理解的模式。
答案 1 :(得分:4)
您可以将代码重构为:
public String getEmployeeName() {
return Optional.ofNullable(employee).map(Employee::getName).orElse(null);
}
ofNullable
从给定员工中创建Optional
值:如果是null
,则返回空Optional
;否则返回包含该员工的Optional
。然后,使用map
将此Optional
映射到员工的姓名,如果Optional
非空且为空,则会返回应用了给定映射器的新Optional
如果Optional
为空,则Optional
。最后,orElse
会返回员工的姓名,null
是Optional
为空。
话虽如此,我认为将此代码放在null
- 检查和条件运算符上没有任何附加值:它可能会有更好的性能,也可能更容易阅读。
答案 2 :(得分:-1)
Java 8具有新的Optional
类,例如
employee
null
永远不会是getEmployeeName()
,但可能是&#34;空&#34;。
然后可以通过两种方式实现// Returning Optional (never null)
public Optional<String> getEmployeeName() {
return this.employee.map(Employee::getName);
}
// Standard getter (may return null)
public String getEmployeeName() {
return this.employee.map(Employee::getName).orElse(null);
}
方法:
newData.second