小编max*_*ver的帖子

如何将代码重写为选项?

在我目前的工作中,我们将一些代码重写为Java 8.如果你有这样的代码:

if(getApi() != null && getApi().getUser() != null 
     && getApi().getUser().getCurrentTask() != null)  
{
   getApi().getUser().getCurrentTask().pause();
}
Run Code Online (Sandbox Code Playgroud)

你可以简单地重写它

Optional.ofNullable(this.getApi())
.map(Api::getUser)
.map(User::getCurrentTask)
.ifPresent(Task::pause);
Run Code Online (Sandbox Code Playgroud)

不改变代码行为.但是,如果中间的东西可以抛出NPE,因为它没有被检查为空呢?

例如:

if(getApi() != null && getApi().getUser() != null 
     && getApi().hasTasks())  
{
   getApi().getMasterUser(getApi().getUser()) //<- npe can be here
     .getCurrentTask().pause();
}
Run Code Online (Sandbox Code Playgroud)

使用optionals重写这样的代码的最佳方法是什么?(它应该完全相同,并在getMasterUser(...)返回null 时抛出npe )

UPD 第二个例子:

if(getApi()!=null && getApi.getUser() != null)
{
   if(getApi().getUser().getDepartment().getBoss() != null)// <- nre if department is null
     {
        getApi().getUser().getDepartment().getBoss().somefunc();
     }
 }
Run Code Online (Sandbox Code Playgroud)

它有api,用户,老板的零检查,但不是部门.怎么用选项?

java nullpointerexception optional java-8

17
推荐指数
1
解决办法
463
查看次数

在Windows版Docker中无法连接到容器IP地址

当您安装使用Hyper-V的Windows的最新Docker时,会发生此问题。

但是,您可以在docker network inspect bridge输出中看到ips :

"Containers": {
            "...": {
                "Name": "dockerdevenvironment_rabbit_1",
                "EndpointID": "...",
                "MacAddress": "02:42:ac:11:00:04",
                "IPv4Address": "172.17.0.4/16",
                "IPv6Address": ""
            },
            "...": {
                "Name": "webserver",
                "EndpointID": "...",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "...": {
                "Name": "dockerdevenvironment_mongo_1",
                "EndpointID": "...",
                "MacAddress": "02:42:ac:11:00:05",
                "IPv4Address": "172.17.0.5/16",
                "IPv6Address": ""
            }
Run Code Online (Sandbox Code Playgroud)

您甚至无法ping通或以任何方式连接它们。

networking hyper-v docker

3
推荐指数
1
解决办法
1852
查看次数