java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java处理对象不为空

java实现处理对象不为空则返回,为空则继续

作者:悟能不能悟

在Java中有多种方法可以处理对象不为空则返回,为空则继续的逻辑,本文为大家整理了几种常见的实现方式,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

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

1. 传统 if-else 方式

public Object processObject(Object obj) {
    if (obj != null) {
        return obj;
    }
    // 继续执行其他逻辑
    return doSomethingElse();
}

2. 三元运算符(简单条件)

public Object getResult() {
    Object obj = getPossibleNullObject();
    return obj != null ? obj : getDefaultObject();
    // 或者继续执行其他逻辑
}

3. 使用 Optional(Java 8+ 推荐)

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. 链式空值检查

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. 实用工具方法

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+)

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:

import org.apache.commons.lang3.ObjectUtils;

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

Google Guava:

import com.google.common.base.MoreObjects;
import com.google.common.base.Supplier;

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

实际应用示例

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 可能更快

到此这篇关于java实现处理对象不为空则返回,为空则继续的文章就介绍到这了,更多相关java处理对象不为空内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文