news 2026/4/18 9:14:30

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/4/18 5:05:24

免费解锁游戏超高清画质:OptiScaler跨平台超分辨率技术完整指南

免费解锁游戏超高清画质&#xff1a;OptiScaler跨平台超分辨率技术完整指南 【免费下载链接】CyberXeSS XeSS replacement for DLSS games 项目地址: https://gitcode.com/gh_mirrors/cy/CyberXeSS 想要在仅支持DLSS的游戏中体验XeSS、FSR2和FSR3等超分辨率技术吗&#…

作者头像 李华
网站建设 2026/4/8 1:05:59

3步搞定GitHub下载加速:告别龟速访问的实用指南

3步搞定GitHub下载加速&#xff1a;告别龟速访问的实用指南 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 还在为GitHub下载速度慢…

作者头像 李华
网站建设 2026/4/18 7:22:51

深入AMD Ryzen硬件调试:SMUDebugTool全面解析与实战应用

深入AMD Ryzen硬件调试&#xff1a;SMUDebugTool全面解析与实战应用 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://…

作者头像 李华
网站建设 2026/4/16 23:42:22

GPT-SoVITS社区活跃度观察:问题响应速度快

GPT-SoVITS社区活跃度观察&#xff1a;问题响应速度快 在当前生成式AI浪潮中&#xff0c;语音合成技术正以前所未有的速度向“平民化”迈进。以往需要数小时专业录音、依赖庞大算力训练的语音克隆系统&#xff0c;如今已被一些轻量级开源项目打破壁垒——GPT-SoVITS 就是其中最…

作者头像 李华