news 2026/3/22 13:33:16

java有没有一段代码,某个对象不为空则返回这个对象,为空则继续

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java有没有一段代码,某个对象不为空则返回这个对象,为空则继续

在Java中有多种方法可以处理对象不为空则返回,为空则继续的逻辑。以下是几种常见的实现方式:

## 1. **传统 if-else 方式**
```java
public Object processObject(Object obj) {
if (obj != null) {
return obj;
}
// 继续执行其他逻辑
return doSomethingElse();
}
```

## 2. **三元运算符(简单条件)**
```java
public Object getResult() {
Object obj = getPossibleNullObject();
return obj != null ? obj : getDefaultObject();
// 或者继续执行其他逻辑
}
```

## 3. **使用 Optional(Java 8+ 推荐)**
```java
import java.util.Optional;

public Object processWithOptional() {
return Optional.ofNullable(getPossibleNullObject())
.orElseGet(() -> {
// 对象为空时执行的逻辑
return getDefaultValue();
});
}

// 或者链式调用
public Object processChain() {
return Optional.ofNullable(getObject1())
.or(() -> Optional.ofNullable(getObject2()))
.orElse(getDefaultObject());
}
```

## 4. **链式空值检查**
```java
public Object getFirstNonNull() {
Object obj1 = getObject1();
if (obj1 != null) return obj1;

Object obj2 = getObject2();
if (obj2 != null) return obj2;

Object obj3 = getObject3();
if (obj3 != null) return obj3;

return getDefaultObject();
}
```

## 5. **实用工具方法**
```java
public class ObjectUtils {

public static <T> T getFirstNonNull(Supplier<T>... suppliers) {
for (Supplier<T> supplier : suppliers) {
T result = supplier.get();
if (result != null) {
return result;
}
}
return null;
}

// 使用示例
public void example() {
Object result = getFirstNonNull(
() -> getObject1(),
() -> getObject2(),
() -> getObject3()
);
}
}
```

## 6. **在 Stream 中使用(Java 8+)**
```java
import java.util.stream.Stream;

public Object getFromStream() {
return Stream.of(getObject1(), getObject2(), getObject3())
.filter(obj -> obj != null)
.findFirst()
.orElse(getDefaultObject());
}
```

## 7. **使用 Apache Commons Lang 或 Guava**

### Apache Commons Lang:
```java
import org.apache.commons.lang3.ObjectUtils;

public Object getWithApache() {
return ObjectUtils.firstNonNull(
getObject1(),
getObject2(),
getObject3()
);
}
```

### Google Guava:
```java
import com.google.common.base.MoreObjects;
import com.google.common.base.Supplier;

public Object getWithGuava() {
return MoreObjects.firstNonNull(
getObject1(),
getObject2()
);
}
```

## 实际应用示例
```java
public class UserService {

public User findUser(String id) {
// 尝试从缓存获取
User user = cache.get(id);
if (user != null) {
return user; // 不为空则返回
}

// 缓存为空,继续从数据库获取
user = database.get(id);
if (user != null) {
cache.put(id, user); // 存入缓存
return user;
}

// 都没有找到,返回默认值
return User.ANONYMOUS;
}

// 使用 Optional 的优雅写法
public User findUserElegant(String id) {
return Optional.ofNullable(cache.get(id))
.or(() -> Optional.ofNullable(database.get(id)))
.map(user -> {
cache.put(id, user);
return user;
})
.orElse(User.ANONYMOUS);
}
}
```

## 推荐
• 对于简单的条件判断,使用传统 `if-else` 最直观

• 对于复杂的空值处理链,推荐使用 Java 8+ 的 `Optional`,代码更清晰

• 如果项目中已经有 Apache Commons 或 Guava,可以使用它们的工具类

• 对于性能敏感的场景,传统 if-else 可能更快

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 20:04:53

B站视频下载技术解析:从原理到实战的完整指南

B站视频下载技术解析&#xff1a;从原理到实战的完整指南 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 问题诊断&#xff1a;为什么…

作者头像 李华
网站建设 2026/3/21 11:59:08

FF14动画跳过终极指南:一键告别副本动画等待

FF14动画跳过终极指南&#xff1a;一键告别副本动画等待 【免费下载链接】FFXIV_ACT_CutsceneSkip 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_ACT_CutsceneSkip 还在为FF14副本中冗长的动画等待而烦恼吗&#xff1f;FFXIV_ACT_CutsceneSkip插件正是你需要的解…

作者头像 李华
网站建设 2026/3/16 1:19:41

CompressO:终极视频压缩解决方案,让大文件瞬间变小

CompressO&#xff1a;终极视频压缩解决方案&#xff0c;让大文件瞬间变小 【免费下载链接】compressO Convert any video into a tiny size. 项目地址: https://gitcode.com/gh_mirrors/co/compressO 还在为视频文件太大而烦恼吗&#xff1f;无论是发送邮件、上传社交媒…

作者头像 李华
网站建设 2026/3/15 18:35:00

JiYuTrainer三分钟速成指南:轻松解锁极域电子教室限制

JiYuTrainer三分钟速成指南&#xff1a;轻松解锁极域电子教室限制 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否曾经在课堂上遇到这样的困境&#xff1f;老师开启极域电子…

作者头像 李华
网站建设 2026/3/21 1:02:40

如何快速配置MPV播放器?MPV_lazy懒人包终极指南

如何快速配置MPV播放器&#xff1f;MPV_lazy懒人包终极指南 【免费下载链接】MPV_lazy &#x1f504; mpv player 播放器折腾记录 windows conf &#xff1b; 中文注释配置 快速帮助入门 &#xff1b; mpv-lazy 懒人包 win10 x64 config 项目地址: https://gitcode.com/gh_mi…

作者头像 李华