相关疑难解决方法(0)

避免!= null语句

我用object != null了很多东西来避免NullPointerException.

有没有一个很好的替代品呢?

例如:

if (someobject != null) {
    someobject.doCalc();
}
Run Code Online (Sandbox Code Playgroud)

NullPointerException当不知道对象是否存在时,这避免了a null.

请注意,接受的答案可能已过期,请参阅/sf/answers/167020941/以获取更新的方法.

java null object nullpointerexception

3904
推荐指数
42
解决办法
119万
查看次数

为什么Java 8的Optional不能在参数中使用

我在许多网站上阅读过Optional只能用作返回类型,而不能在方法参数中使用.我很难找到合乎逻辑的原因.例如,我有一个逻辑,它有2个可选参数.因此,我认为像这样编写我的方法签名是有意义的(解决方案1):

public int calculateSomething(Optional<String> p1, Optional<BigDecimal> p2 {
    // my logic
}
Run Code Online (Sandbox Code Playgroud)

许多网页指定Optional不应该用作方法参数.考虑到这一点,我可以使用以下方法签名并添加一个清晰的Javadoc注释来指定参数可能为null,希望将来的维护者将读取Javadoc,因此在使用参数之前始终执行空值检查(解决方案2) :

public int calculateSomething(String p1, BigDecimal p2) {
    // my logic
}
Run Code Online (Sandbox Code Playgroud)

或者,我可以用四种公共方法替换我的方法以提供更好的界面并使其更明显p1和p2是可选的(解决方案3):

public int calculateSomething() {
    calculateSomething(null, null);
}

public int calculateSomething(String p1) {
    calculateSomething(p1, null);
}

public int calculateSomething(BigDecimal p2) {
    calculateSomething(null, p2);
}

public int calculateSomething(String p1, BigDecimal p2) {
    // my logic
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试编写类的代码,为每种方法调用这条逻辑.我首先从另一个返回Optionals的对象中检索两个输入参数然后调用calculateSomething.因此,如果使用解决方案1,则调用代码将如下所示:

Optional<String> p1 = otherObject.getP1();
Optional<BigInteger> p2 = otherObject.getP2();
int result = myObject.calculateSomething(p1, p2);
Run Code Online (Sandbox Code Playgroud)

如果使用解决方案2,则调用代码将如下所示:

Optional<String> …
Run Code Online (Sandbox Code Playgroud)

java optional java-8

344
推荐指数
12
解决办法
13万
查看次数

Java 8 getter应该返回可选类型吗?

Optional Java 8中引入的类型对于许多开发人员来说是一件新事物.

一个getter方法返回Optional<Foo>类型代替经典的Foo一个好习惯吗?假设值可以null.

java nullable optional java-8

267
推荐指数
4
解决办法
5万
查看次数

为什么在Optional.ofNullable上使用Optional.of?

使用Java 8 Optional类时,有两种方法可以将值包装在可选项中.

String foobar = <value or null>;
Optional.of(foobar);         // May throw NullPointerException
Optional.ofNullable(foobar); // Safe from NullPointerException
Run Code Online (Sandbox Code Playgroud)

我理解Optional.ofNullable是唯一安全的使用方式Optional,但为什么Optional.of存在呢?为什么不Optional.ofNullable 随时使用并保持安全?

java null nullpointerexception optional java-8

206
推荐指数
3
解决办法
10万
查看次数

为什么java.util.Optional不是Serializable,如何使用这些字段序列化对象

Enum类是Serializable,因此使用枚举序列化对象没有问题.另一种情况是class具有java.util.Optional类的字段.在这种情况下,抛出以下异常:java.io.NotSerializableException:java.util.Optional

如何处理这些类,如何序列化它们?是否可以将此类对象发送到远程EJB或通过RMI?

这是一个例子:

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Optional;

import org.junit.Test;

public class SerializationTest {

    static class My implements Serializable {

        private static final long serialVersionUID = 1L;
        Optional<Integer> value = Optional.empty();

        public void setValue(Integer i) {
            this.i = Optional.of(i);
        }

        public Optional<Integer> getValue() {
            return value;
        }
    }

    //java.io.NotSerializableException is thrown

    @Test
    public void serialize() {
        My my = new My();
        byte[] bytes = toBytes(my);
    }

    public static <T extends Serializable> byte[] toBytes(T reportInfo) { …
Run Code Online (Sandbox Code Playgroud)

java serialization optional java-8

101
推荐指数
4
解决办法
3万
查看次数

使用哪个@NonNull Java注释

什么是最好的 'NonNull'注释?

意义上的"最佳"

  • 标准方式,例如未来证明(例如标准jdk支持等)
  • 支持IDE(在java doc中显示以指示开发人员的使用情况)
  • 由findbugs等静态分析工具提供支持
  • 支持运行时分析

以下是世界目前的样子 - 任何进一步的见解都值得赞赏:

  • javax.validation.constraints.NotNull(Docs)
    + javax包因此看起来是未来的
    - JEE的一部分不是 JSE.在JSE中需要导入额外的库.
    - 静态分析工具不支持(仅限运行时验证)

  • edu.umd.cs.findbugs.annotations.NonNull(docs)
    - 外部库而不是javax
    - 不推荐使用,因为findbugs版本3.X
    +用于静态分析(由findbugs和Sonar提供)

  • javax.annotation.Nonnull(docs)
    +用于静态分析(在findbugs中)
    - JSR-305处于休眠/死亡/未知状态,如fb邮件列表所示.提交人Bill Pugh,即使直接被问到,多年来也没有对该州进行评论......

  • org.eclipse.jdt.annotation_2.0.0(文档,有趣的演示文稿)
    +用于静态分析(虽然在eclipse中不在findbugs中)
    - eclipse专有(没有尝试独立使用它们)

  • org.jetbrains.annotations.NotNull(docs)
    +用于静态分析(虽然不是在findbugs
    中的IntelliJ )- IntelliJ专有(但也可以公开作为jar)

  • lombok.NonNull(docs)
    +用于控制代码生成
    - 专有注释

  • android.support.annotation.NonNull(docs)
    + android …

java eclipse annotations intellij-idea nullpointerexception

64
推荐指数
1
解决办法
1万
查看次数

可选与null.Java 8中Optional的目的是什么?

在Java 8中,您可以返回Optional而不是a null.Java 8文档说可选是"容器对象,可能包含也可能不包含非空值.如果存在值,isPresent()将返回true,get()将返回值."

在实践中,为什么这有用?此外,是否有任何null优先使用的情况?性能怎么样?

java java-8

44
推荐指数
3
解决办法
3万
查看次数

如何从可空对象中最好地创建Java 8流?

在获取流之前进行空检查的最佳/惯用方法是什么?

我有接收List可能为null的方法.所以我不能只调用.stream()传入的值.是否有一些静态助手,如果值为null,会给我一个空流?

java java-8 java-stream

29
推荐指数
5
解决办法
2万
查看次数

在类中使用Optional作为属性是一个好习惯吗?

我已经阅读了OptionalJava 8中的目的(遗憾的是我不记得在哪里),我很惊讶作者没有提到在类中使用an Optional作为属性.

由于我在课堂上经常使用选项,我想知道这是不是很好.或者我可以更好地使用普通属性,null它们在未设置时返回?

注意:看起来我的问题可能是基于意见的,但我觉得Optional在课堂上使用的感觉真的不是要走的路(看完上面提到的帖子后).但是,我喜欢使用它,并且找不到使用它的任何缺点.

我想举一个例子来澄清.我有一个类Transaction,它是这样构建的:

public class Transaction {

     private Optional<Customer> = Optional.empty();
     ....
Run Code Online (Sandbox Code Playgroud)

VS

public class Transaction {

     private Customer = null;
     ....
Run Code Online (Sandbox Code Playgroud)

当在一个检查Customer,我认为这是最合理的使用transaction.getCustomer().isPresent()transaction.getCustomer() != null.在我看来,第一个代码比第二个代码更清晰.

java optional java-8

26
推荐指数
2
解决办法
2万
查看次数

Java 8可选.为什么和ofNullable?

我有一个关于Java 8的Optional的问题,其目的是解决NullPointerException异常问题.

问题是,让两种类型让我们选择的原因是什么:

Optional.of(T value)     <-----non-null value, null value will throw NPE
Optional.ofNullable(T value)   <----- nullable value
Run Code Online (Sandbox Code Playgroud)

因为我的期望是,当我使用时:

Optional.of(nullValue);
Run Code Online (Sandbox Code Playgroud)

它不会抛出一个NullPointerException.


一些回复后扩大了我的问题:

为什么人们会选择Optional而不是普通if-else的null检查?

java optional java-8

16
推荐指数
5
解决办法
2611
查看次数