在可能的空对象上一行调用void

时间:2019-05-23 10:56:26

标签: java null

我在项目中使用Java8,但无法通过良好的实现解决此问题。

{
  "ProjectBaseUrl": "https://my-project.visualstudio.com/",
  "ProjectName": "my-project",
  "AzureDevOpsPac": ".....",
  "SubscriptionId": "...",
  "AgentPool": {
    "PoolId": 38,
    "PoolName": "MyPool",
    "MinimumAgentCount": 2,
    "MaximumAgentCount": 10
  },
  "ContainerRegistry": {
    "Username": "mycontainer",
    "LoginServer": "mycontainer.azurecr.io",
    "Password": "..."
  },
  "ActiveDirectory": {
    "ClientId": "...",
    "TenantId": "...",
    "ClientSecret": "..."
  }
}

是否有解决方案来检查对象是否为UIInput textInput = ...; if (textInput != null) { textInput.setValid(false); } ,如果不是,则在一行上调用该函数?!

3 个答案:

答案 0 :(得分:3)

不要。

具有Java知识的任何人都可以轻松阅读您拥有的内容。任何单线滥用旨在用于其他目的的构造都会比大多数人花费更多的时间阅读和理解。可能有些人会误读它,并且当它在调试会话中的表现不如预期时,不得不稍后再读一次。

简洁性/代码行数并不是可读性或质量的最终衡量标准。

如果与您的方法其余部分相比在细节上处于错误的水平,您可以执行的操作是通过一个单一的方法调用将其抽象化。说,创建一个方法“ ensureTextInputIsSet”,其中仅包含此代码并返回可能被修改的对象。

答案 1 :(得分:1)

Optional.ofNullable(textInput).ifPresent(x -> x.setValid(false));

但这不是Optional设计用于...的

答案 2 :(得分:1)

如果变量可以为null,则对象是可选的,然后:

Optional<UIInput> textInput = ...;

使用情况稳定但始终安全:

textInput.ifPresent(ti -> ti.setValid(false));

还有很好的链接,例如从Optional<UIInput>Optional<String>调用UIInput上的方法。

String s = textInput.map(UIInput::getText).orElse("");