我如何根据声纳lint规则更改代码?
我的代码如下:
public interface TokenParser {
public Optional<String> getUserName();
}
public class JWTTokenParser implements TokenParser {
private Optional<Jwt> getJwt() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (!authentication.isAuthenticated() || authentication instanceof AnonymousAuthenticationToken) {
return Optional.empty();
}
return Optional.ofNullable((Jwt) authentication.getPrincipal());
}
@Override
public Optional<String> getUserName() {
return Optional.ofNullable(getJwt().get().getClaimAsString("preferred_username"));
}
}
我不能通过声纳规则。我怎么能改变我的代码?
问题是,在未选中isPresent
的情况下,调用get
时会发出警告。如果不存在值,它将抛出NoTouchElementException
,这违反了使用Optional
的想法。
@Override
public Optional<String> getUserName() {
return Optional.ofNullable(getJwt().get().getClaimAsString("preferred_username"));
}
由于getUserName()
也会返回一个Optional
,我们可以使用Optional#map
来转换Optional
return getJwt().map(jwt -> jwt.getClaimAsString("preferred_username")));
map
方法将为我们处理不同的情况,如下所示:
我收到一个包含lastName和firstName的客户对象。在转换中,我检查两个值是否都不为空,然后将它们传递到DTO: 但我仍然得到Sonar消息可选值应该只有在调用isPresent()后才能访问。 我是漏掉了什么还是误报了?
我正在使用Spring数据Mongo Pageable和声纳给我以下错误: 我尝试了几个选择,但都没有成功。
在Java8中有没有更优雅的方法来实际实现这一点呢? 我说的是后跟,我想在列表中优雅地收集具有值的结果。
我如何返回那些在访问Milpitas之后访问Santa Clara或在访问#2之后访问#5的客户的?
有人能解释一下<code>是可选的</code>如何帮助我们避免<code>NullPointerException</code>吗? 这段代码不是也容易出现<code>NullPointerException</code>吗?如果是这样的话,那么为什么这个代码比其他代码更受欢迎 除了帮助我们了解函数是否实际具有返回值之外,还提供了什么可能的好处
我是一个相对新手流用户,我觉得应该有一个更干净的方式来完成我下面的内容。是否有可能在一个流中完成下面的代码所做的一切(消除底部的if/else)? 谢谢