有没有办法避免这种重复?

我这里有一个非常简单的方法:

    private String claimAsString(
        JWTClaimsSet claims,
        String claimName,
        String fallbackClaimName)
    {
        Object claim = claims.getClaim(claimName);
        if (claim != null)
        {
            return (String) claim;
        }

        Object fallbackClaim = claims.getClaim(fallbackClaimName);
        if (fallbackClaim != null)
        {
            return (String) fallbackClaim;
        }
        return null;
    }

基本上是从 JWT 声明集中获取声明,如果它不存在,则获取回退值。但看起来代码的 2 个块太相似了......只是想知道是否有更好的方法来重新编写它以使其更清晰。

回答

如果你是单线的粉丝,你可以做这样的事情:

Object claim = claims.getStringClaim(claimName);
return (String) (claim == null ? claims.getStringClaim(fallbackClaimName) : claim);

但是,您可能需要考虑将claimAsString方法更改为具有Optional返回类型。那么你可以这样做:

Optional<String> claimAsString(JWTClaimsSet claims, String claimName, String fallbackClaimName) {
    
    return Optional.ofNullable((String) claims.get(claimName))
            .or(() -> Optional.ofNullable((String) claims.get(fallbackClaimName)));
}

  • I don't see any issues @VivekJain https://ideone.com/3W41X9

以上是有没有办法避免这种重复?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>