有没有办法避免这种重复?
我这里有一个非常简单的方法:
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