当前位置: 首页 > wzjs >正文

做电影网站要不要收费帮人家做家务的网站

做电影网站要不要收费,帮人家做家务的网站,怎么加入电商平台卖货,深圳装饰企业前50强在 Java 开发中,频繁的 if (obj ! null) 判空代码会导致代码冗余、可读性差,且容易遗漏判空导致 NullPointerException。以下从 语言特性、设计模式、工具类 和 编码规范 四个维度,结合实际案例,详解如何优雅处理空值问题。 一、…

在 Java 开发中,频繁的 if (obj != null) 判空代码会导致代码冗余、可读性差,且容易遗漏判空导致 NullPointerException。以下从 语言特性、设计模式、工具类 和 编码规范 四个维度,结合实际案例,详解如何优雅处理空值问题。

一、利用 Java 8+ 的 Optional 类

Optional 是函数式编程的容器类,显式表达可能为空的值,强制开发者处理空逻辑。
1. 案例:链式处理嵌套对象
传统判空代码(易出错且冗长):

public String getUserCity(User user) {if (user != null) {Address address = user.getAddress();if (address != null) {return address.getCity();}}return "Unknown";
}

使用 Optional 优化:

public String getUserCity(User user) {return Optional.ofNullable(user).map(User::getAddress)     // 若user为null,直接跳过.map(Address::getCity)     // 若address为null,跳过.orElse("Unknown");        // 最终兜底值
}

2. 关键方法
在这里插入图片描述
3. 注意事项

  • 避免滥用 Optional:不要用它替代所有 null,如方法参数、字段或集合。
  • 性能影响:在高频调用场景(如循环体内部),Optional 的创建可能带来轻微性能损耗。

二、工具类封装判空逻辑

通过工具类集中处理空值,减少重复代码。
1. 使用 Objects 类(Java 7+)

import java.util.Objects;// 参数校验(若input为null,抛出NPE)
public void process(String input) {Objects.requireNonNull(input, "Input must not be null");// 后续逻辑
}

2. Apache Commons Lang3

import org.apache.commons.lang3.StringUtils;// 判空并处理字符串
if (StringUtils.isNotBlank(str)) {System.out.println(str.trim());
}// 通用对象判空
if (ObjectUtils.isNotEmpty(list)) {list.forEach(System.out::println);
}

3. Guava 的 Preconditions

import com.google.common.base.Preconditions;public void process(String input) {Preconditions.checkArgument(input != null, "Input must not be null");// 后续逻辑
}

三、通过设计模式规避空指针

1. Null Object 模式
场景:需要避免返回 null 的业务逻辑。
案例:订单系统中的客户信息查询:

public interface Customer {String getName();boolean isAnonymous();
}// 真实客户对象
public class RealCustomer implements Customer {private String name;public String getName() { return name; }public boolean isAnonymous() { return false; }
}// 空对象(代替null)
public class NullCustomer implements Customer {public String getName() { return "Anonymous User"; }public boolean isAnonymous() { return true; }
}// 使用
public Customer findCustomerById(String id) {Customer customer = db.query(id);return customer != null ? customer : new NullCustomer();
}// 客户端无需判空
customer.getName(); // 永远有值

2. 返回空集合而非 null
错误示例:

public List<String> getOrders() {if (noOrders) {return null;  // 导致客户端必须判空}return orders;
}

正确实践:

public List<String> getOrders() {return orders != null ? orders : Collections.emptyList();
}// Java 9+ 可使用 List.of()
public List<String> getOrders() {return orders != null ? orders : List.of();
}

四、静态代码分析与注解

通过 @Nullable 和 @NonNull 注解,结合 IDE 或静态分析工具(如 Checker Framework、SpotBugs)在编译时检查空值。

1. 使用 Spring 的注解

import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;public void process(@NonNull String input) { // 标记参数不可为nullSystem.out.println(input.length());
}@Nullable
public String findNameById(Long id) { // 明确返回值可能为nullreturn nameService.query(id);
}

2. 集成 IDE 检查

  • IntelliJ IDEA:内置支持 @Nullable 注解,自动提示可能的空指针。
  • Eclipse:通过 @NonNullByDefault 配置全局非空约束。

五、Lombok 的 @NonNull

自动生成判空代码,适合简化方法参数校验。

import lombok.NonNull;public void process(@NonNull String input) { // Lombok 自动生成:if (input == null) throw NPESystem.out.println(input.length());
}

六、综合案例分析

场景:订单服务中获取用户地址
传统代码:

public String getOrderAddress(Order order) {if (order != null) {User user = order.getUser();if (user != null) {Address address = user.getAddress();if (address != null) {return address.getFullAddress();}}}return "Address not found";
}

优化方案:

public String getOrderAddress(Order order) {return Optional.ofNullable(order).map(Order::getUser).map(User::getAddress).map(Address::getFullAddress).orElse("Address not found");
}

进一步优化(结合设计模式):

/ 定义 NullAddress 对象
public class NullAddress implements Address {public String getFullAddress() {return "Address not found";}
}// 修改 User 类的 getAddress 方法
public Address getAddress() {return address != null ? address : new NullAddress();
}// 最终代码
public String getOrderAddress(Order order) {return Optional.ofNullable(order).map(Order::getUser).map(User::getAddress).map(Address::getFullAddress).orElse("Address not found"); // 或直接返回空对象的逻辑
}

总结:何时使用哪种方案?

在这里插入图片描述
终极原则:

    1. 不要返回 null:用空集合、空对象或 Optional 代替。
    1. 防御式编程:公共方法的参数显式校验。
    1. 文档化:在方法签名或注释中明确是否可能返回 null。
    1. 静态分析:通过工具提前发现潜在的空指针问题。

通过以上方法,可显著减少 if (obj != null) 的显式判空,提升代码的安全性和可维护性。

http://www.dtcms.com/wzjs/601902.html

相关文章:

  • 广东省建设工程造价管理协会网站看2d影片最好的地方
  • 免费空间asp网站建网站合同
  • 郑州地方网络推广网站兰州网络广告设计价格
  • 电子商务网站建设课程的心得网站建设炎陵
  • 手机怎么打开禁止访问的网站网络营销推广运营
  • 株洲营销网站建设app界面设计尺寸规范
  • 网站开发难吗单仁网站建设
  • 电子网站大全沈阳网站建设公司熊掌号
  • 网站群建设 公司seo基本步骤
  • 做文具的网站佛山新网站建设教程
  • 网站建设软硬件平台有哪些老域名查询
  • 珠海做网站价格孝感英文网站建设
  • 一个具体网站的seo优化西安最新消息今天
  • 网站备案期间 权重动态ip怎么做网站
  • 网站源码下载炫酷济南官方网站
  • 网站建设费入如保入账网址查询服务器地址
  • 网站页面策划软件重庆家政网站建设
  • 广州网站建设流程图盘锦注册公司
  • 学网站开发应该学什么一元快速引流1000个方法
  • 沈阳微信网站制作价格wordpress加速 redis
  • 建设文化网站好处西安又有新型传染病了吗
  • 网页制作教程书籍德州seo
  • 怎么自己公司名下的网站怎么编辑wordpress主题代码
  • python做网站有优势wordpress前端上传大文件大小
  • 做微博这样的网站ip开源网站FPGA可以做点什么
  • 常州网站建设公司案例做网站卖产品怎么开展
  • 临沂培训学校网站建设4001688688人工服务
  • 做动画相册在哪个网站好怎样建立俄罗斯网站
  • 佛山网站建设在哪找建站前端模板
  • 福州展示网站制作的公司网站开发有什么