相关疑难解决方法(0)

Null-safe方法调用Java7

我想获得有关此代码的Java7此功能的详细信息

public String getPostcode(Person person)
{
    if (person != null)
    {
        Address address = person.getAddress();
        if (address != null)
        {
            return address.getPostcode();
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

可以做这样的事情

public String getPostcode(Person person)
{
    return person?.getAddress()?.getPostcode();
}
Run Code Online (Sandbox Code Playgroud)

但坦率地说,对我来说不太清楚.请解释一下?

java java-7

10
推荐指数
1
解决办法
9987
查看次数

Java 8 Elvis运算符中的空检查?

问题:是否有计划用于任何未来Java版本的Elvis运算符的实现?或者是否有任何库将其带入Java?

我读过这个

它是为Java SE 7提出的,但没有进入该版本

http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html

我知道Java 8允许这样做

String name = computer.flatMap(Computer::getSoundcard)
                          .flatMap(Soundcard::getUSB)
                          .map(USB::getVersion)
                          .orElse("UNKNOWN");
Run Code Online (Sandbox Code Playgroud)

但是我的口味太过分了.因此,如果有人能指出我将任何项目/库,将Groovy喜欢/ C#类似的语法带到Java的Null Checks,将不胜感激.

编辑:通过Elvis运算符我的意思是:

String version = computer?.getSoundcard()?.getUSB()?.getVersion();
Run Code Online (Sandbox Code Playgroud)

或类似的

java nullpointerexception java-8

10
推荐指数
1
解决办法
4575
查看次数

android studio:java.lang.NullPointerException:指定为非空的参数为空:方法kotlin.jvm.internal.Intrinsics.checkNotNullParameter

我正在尝试在 android studio 中使用 Kotlin 构建地理围栏应用程序,但虚拟机崩溃了,然后下次运行显示此错误

E/AndroidRuntime:致命异常:主进程:com.example.mapgis,PID:3002 java.lang.NullPointerException:指定为非空的参数为空:方法 kotlin.jvm.internal.Intrinsics.checkNotNullParameter,在 com. example.mapgis.MapsActivity.onMapReady$lambda-2(未知来源:7)位于 com.example.mapgis.MapsActivity。$r8$lambda$j524CuJ2hJLTFNPmiaC5VRpPy0I(未知来源:0)位于 com.example.mapgis.MapsActivity$$ExternalSyntheticLambda2。 onSuccess(来源不明:4)在 com.google.android.gms.tasks.zzm.run(com.google.android.gms:play-services-tasks@@18.0.0:1)在 android.os.Handler。处理回调(Handler.java:873)在android.os.Handler.dispatchMessage(Handler.java:99)在android.os.Looper.loop(Looper.java:193)在android.app.ActivityThread.main(ActivityThread.java :6669)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)在com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)

代码

package com.example.mapgis

import android.Manifest
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.app.job.JobInfo
import android.app.job.JobScheduler
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color
import android.location.Location
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.app.JobIntentService
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import com.example.mapgis.GeofenceReceiver
import com.example.mapgis.R
import com.example.mapgis.Reminder
import com.google.android.gms.location.*
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.maps.*

import com.google.android.gms.maps.model.CircleOptions
import com.google.android.gms.maps.model.LatLng
import …
Run Code Online (Sandbox Code Playgroud)

android google-api kotlin android-geofence firebase-realtime-database

10
推荐指数
0
解决办法
5564
查看次数

null-safe Collection包含方法

contains在Java集合上执行null-safe的最佳方法是什么?

换一种说法 -

 if (collection != null && collection.contains(x))
Run Code Online (Sandbox Code Playgroud)

我希望Apache commons-collections有类似的东西CollectionUtils.contains(collection, x),如果集合为null,就会返回false,因为有size(),像空集合一样处理null.

然而,似乎没有这样的事情 - 我只是想念它吗?

java collections apache-commons-collection

8
推荐指数
1
解决办法
7978
查看次数

如何更好的重构方法链可以在java中返回null?

我的代码如下:

obj1 = SomeObject.method1();
if (obj1 != null) {
  obj2 = obj1.method2();
  if (obj2 != null) {
     obj3 = obj2.method3();
     if (obj3 != null) {
              ............


     return objN.methodM();

   }
  }
 }
....
Run Code Online (Sandbox Code Playgroud)

我有近10步.它似乎非常脆弱且容易出错.有没有更好的方法来检查空链方法?

谢谢.

java methods null refactoring chain

8
推荐指数
3
解决办法
3073
查看次数

面向对象编程中null的最佳替代方法是什么?

在OOP中避免null,我感到不满意.有没有替代解决方案?我也不想以这种方式避免它 .

处理它的最佳方法是什么?

oop object

7
推荐指数
1
解决办法
1208
查看次数

具有空对象模式的DAO

阅读后:
有效的Java(参见条款43) - Joshua Bloch
清洁代码(不要返回空) - Bob叔叔
避免!= null语句
Null对象模式

我正在寻找答案,当搜索最终成为非收集对象不存在的实体时,DAO应该返回什么.通过使用空数组或emptyList方法,集合对象确实可以.但是对于非收藏品,它可能会更难.另一种解决方案是永远不会返回null,而是使用Null Object模式.但是我不知道将Null Object模式与DAO集成,我真的很高兴看到与Null Object模式和DAO模式的完美集成,特别是对于模型(dto)对象返回情况.

我将非常感谢并欢迎任何最佳设计模式,场景和建议.

java null dao nullpointerexception null-object-pattern

7
推荐指数
2
解决办法
2878
查看次数

断言空检查

似乎广泛接受断言语句应保留用于测试和生产中禁用,因为错误应该已经解决,并且启用断言会影响性能.然而,使用if语句进行空检查肯定也是如此.为什么这段代码被认为适合生产

if(x != null) {
    x.setId(idx);
    if (y != null) {
        if (y.id == x.id) {
            x.doSth();
        }
    } else {
        //handle error
    }
} else {
    //handle error
}
Run Code Online (Sandbox Code Playgroud)

但这段代码不是吗?(假设启用了断言)

try {
    assert(x != null); 
    x.setId(idx);
    assert(y != null);
    if (y.id == x.id) {
        x.doSth();
    }
} catch (AssertionError e) {
    //handle error
}
Run Code Online (Sandbox Code Playgroud)

我理解在预期变量可能未初始化时使用if语句.然而,当它用于防御性编码时,断言似乎更优雅和可读.

我还测试了每种方法的性能:

public class AssertTest {

    static final int LOOPS = 10000000;

    public static void main(String[] args) {

            String testStr = "";

            long startNotEqualsTest = …
Run Code Online (Sandbox Code Playgroud)

java

7
推荐指数
1
解决办法
4109
查看次数

有没有更简洁的方法来编写这个Java代码?

foo是由返回lookup可能null.

这就是为什么我试图避免调用foo.getFooStr()null的第一返回值null是否foonull.

但是有更好(更简洁)的方式来写这个吗?

public static String getFooStr(String input)
{
    Foo foo = lookup(input);
    if(foo==null)
    {
        return null;
    }
    return foo.getFooStr();
}
Run Code Online (Sandbox Code Playgroud)

java null

6
推荐指数
2
解决办法
1242
查看次数

Java中的NotNull在哪里?

我想用oracle jdk 1.8编译简单的代码:

class Foo {
   public static void test(@NotNull String a) {}
}
Run Code Online (Sandbox Code Playgroud)

但是idea不了解这样的代码,建议添加:

import com.sun.istack.internal.NotNull;
Run Code Online (Sandbox Code Playgroud)

这里面编译后idea的作品,但如果运行构建通过gradle这样的build.gradle

version '1.0-snaphshot_03.03.2017'

apply plugin: 'java'

targetCompatibility = '1.8'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

task sourcesJar(type: Jar, dependsOn: classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

artifacts {
    archives sourcesJar
}
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

error: package com.sun.istack.internal does not exist
import com.sun.istack.internal.NotNull;

 error: cannot find …
Run Code Online (Sandbox Code Playgroud)

java

6
推荐指数
1
解决办法
9139
查看次数