相关疑难解决方法(0)

返回Optional <Map <String,String >>的真正好处是什么,而不仅仅是一个空的Map <String,String>

如果我的代码Map<String, String>肯定会返回,但可能是空的.转换它是否有益处Optional<Map<String, String>>.它会为空但不是空实例添加任何好处吗?

java optional java-8

5
推荐指数
1
解决办法
764
查看次数

如何在Jackson序列化期间跳过Optional.empty字段?

我有一个带有Optional字段的Java类.我使用Jackson 2.8.3(从Spring web 4.3.3调用)将类序列化为JSON.

如果Optional为空,我希望让序列化程序跳过该字段,并序列化包含的字符串(如果存在).我正在寻找两个对象列表的结果示例:

[
    {
        "id": 1,
        "foo": "bar"
    },
    {
        "id": 2,
    }
]
Run Code Online (Sandbox Code Playgroud)

对于id为2的对象,foo Optional为空.

相反,我得到的是:

[
    {
        "id": 1,
        "foo": {
            "present": true
        }
    },
    {
        "id": 2,
        "foo": {
            "present": false
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

即使我在类中注释"bar"字段,这也是结果

@JsonInclude(JsonInclude.Include.NON_ABSENT)
public Optional<String> getFoo() { ...
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以使用Jackson注释或自定义序列化器来获得第一个列表的结果?

java serialization json jackson spring-boot

5
推荐指数
1
解决办法
2638
查看次数

用Java模拟指针?在科特林?

我试图模拟在另一个模糊的编程范例中使用的一种指针,所以我可以将一些代码移植到Java.另一种语言不是面向对象的,而是 Pascal的松散灵感.

在原始语言中,我们可以编写这样的代码.首先,使用文本.

// Start with text.
Text myVar = "Bonjour" 
Pointer myPointer = ->myVar       // Referencing a string variable, storing the reference in another variable of type `Pointer`.
Message( myPointer-> )    // Dereferencing the pointer, to retrieve `myVar`, and pass the string to a command `Display` that displays the message on screen in a dialog box.
Run Code Online (Sandbox Code Playgroud)

然后,切换到数字.

// Switch gears, to work with an number.
Integer vResult = ( Random % ( vEnd - vStart + …
Run Code Online (Sandbox Code Playgroud)

java types pointers

5
推荐指数
1
解决办法
195
查看次数

可选 &lt;List&gt; 是不好的做法吗?

我不断看到一些用户说不建议使用带有可选的集合/是不好的做法。我找不到太多关于为什么这是不好的做法的信息,所以我在这里。

如果重要的话,在我的特定情况下,我有一个带有 2 个方法的 JpaRepository。一Optional<List> getValues()又一秒List getDefaultValues(),如下所示:

public interface someRepository extends JpaRepository<x, y> {

    Optional<List> getValues();

    List getDefaultValues();
}
Run Code Online (Sandbox Code Playgroud)

这个想法是这些值可能不存在,所以我想强制方法调用者这样做,.orElse(getDefaultValues())这样就不会返回空列表。我还认为这比仅仅做这样的事情更整洁:

List list = getValues();

if (list.isEmpty()) {
   list = getDefaultValues();
}
Run Code Online (Sandbox Code Playgroud)

如有任何反馈,我们将不胜感激。

编辑:我意识到我的例子并不是最适合这个问题,正如下面的答案所指出的。但是,我仍然想了解为什么Optional<List>有些人认为这是不好的做法。

这个问题并没有真正回答我的问题。

java

5
推荐指数
1
解决办法
4964
查看次数

将null值传递给方法时自动抛出IllegalArgumentException

我正在探索在重构我正在研究的代码库的一部分时消除null的可能性.我们已升级到java 8,因此我们Optional<T>随意使用.为了有效地做到这一点,我们需要确保不将null传递给我们的任何方法(这是在我们包装任何潜在的空值之后Optional,从外部服务/库进入我们的系统).处理这个的显而易见的方法是显式检查null并IllegalArgumentException在必要时抛出,但是,这将是不合理的冗长和手动.是否有更少的手动/更简洁的方式来做到这一点?

java null optional java-8

4
推荐指数
2
解决办法
2514
查看次数

Java 8“可选”不好的做法?

我有一个代码:

val d = Single
            .zip<List<X>, Optional<Y>, DataContent>(
                    xSingle,
                    YSingle,
                    BiFunction { x, y ->
                        val b = if (y.isPresent()) {
                            y.get()
                        } else {
                            null
                        }
                        return@BiFunction DataContent(x, b)
                    })
            .subscribe({ data ->
                ...
            }, { t ->
                ...
            })
Run Code Online (Sandbox Code Playgroud)

我听说,使用Optional检查示例中所示的空值是不好的做法。真的吗?为什么?有人可以展示使用的替代方案RxJava2吗?

android kotlin option-type rx-java2

2
推荐指数
1
解决办法
5461
查看次数

是否可以用 Java Optional 记录返回值不为空?

是否可以记录返回值不是nullJava 的Optional

大多数工具和框架只关心参数,但我想用返回值不是的类型来表达null(而不是在 JavaDoc 中这样做)。

UPDATE Looks line 你可以同意团队使用Optional作为返回值,如果你想表达可能null和直接的对象,当它绝对不为空时:

public Optional<Job> getJob() {  ... }
public Job extractJob(NonNullJobHolder<Job> holder) { ... }
Run Code Online (Sandbox Code Playgroud)

java non-nullable optional

2
推荐指数
1
解决办法
4011
查看次数

Guava - 将从两个可选值中提取的值收集到 ImmutableSet 中

我希望避免多种if-else情况。下面的代码有更简洁的写法吗?

private Set<String> getValues(Optional<String> one, Optional<String> two) {
    if (one.isPresent() && two.isPresent()) {
        return ImmutableSet.of(one.get(), two.get());
    } else if (one.isPresent()) {
        return ImmutableSet.of(one.get());
    } else {
        return two.isPresent() ? ImmutableSet.of(two.get()) : ImmutableSet.of();
    }
}
Run Code Online (Sandbox Code Playgroud)

java set guava immutable-collections option-type

2
推荐指数
1
解决办法
231
查看次数

如何解释和使用Java 1.8 Optional Class

这是来自另一个StackOverflow问题的代码段:

@Override
public String convertToDatabaseColumn(final UUID entityValue) {
    return ofNullable(entityValue).map(entityUuid -> entityUuid.toString()).orElse(null);
}
Run Code Online (Sandbox Code Playgroud)

我真的很难理解Optional类的使用.返回代码是"返回映射的值(String),还是NULL,如果失败?

如何返回作用于方法而不是类 - 即Optional.ofNullable()?

java

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

如何将Optional&lt;List&lt;Integer&gt;&gt;转换为Optional&lt;ArrayList&lt;Integer&gt;&gt;

我尝试执行以下操作,但它不起作用

Optional<List<Integer>> listOne = someAPI.call()
// convert
Optional<ArrayList<Integer>> listTwo = new ArrayList<>(listOne); // doesn't work
Optional<ArrayList<Integer>> listTwo = Optional.of(new ArrayList(listOne)); // also not working

Run Code Online (Sandbox Code Playgroud)

请注意,第一个 API 返回Optional<List>. 我需要发送Optional<ArrayList>到另一个 API。

java list arraylist option-type

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

如果底层对象为空,则返回可选的内置方法

我遇到一个特定的用例,如果对象为空,我经常需要将它们包装起来Optional。看一下这段代码:

List<AbstractCorporateAction> cas = stream.toList();
if (cas.isEmpty()) return Optional.empty();
else return Optional.of(cas);
Run Code Online (Sandbox Code Playgroud)

我检查列表是否为空,如果确实为空,则返回一个空可选,如果不是,则将其包装。原因是有时我得到列表本身的空值,有时我得到一个实际的列表,但它是空的。

通过这种方法,当返回的可选本身为空时,我不需要仔细检查底层列表。

但对于不同的数据结构,实现方式有所不同。是否有第三方库的内置方法可以实现此目的?我得到的最接近的是 fromGuava.MoreObjects#isEmpty但它只检查对象是否为空,并且在它为空的情况下不返回可选值。

我可以为此编写自己的封面,但我正在寻找一种专业、可靠的方法来实现所需的功能。

java guava java-stream option-type java-17

0
推荐指数
1
解决办法
948
查看次数

防止 Java 中的 instanceof 和强制类型转换

instanceof如果我想要使用方法签名不同的不同验证器,如何避免在这种情况下使用和转换?

代码

for(BatchValidator validator : validators) {
  try {     
    if (validator instanceof BatchErrorValidator) {
      ((BatchErrorValidator<T>) validator).validate(targets);
    } else if (validator instanceof BatchWarningValidator) {
      ((BatchWarningValidator<T>) validator).validate(targets, header);
    }
  } catch (BatchValidationException e) {
    handleImportExceptions(e, header.getSequenceId());
  }
}
Run Code Online (Sandbox Code Playgroud)

java oop instanceof

-1
推荐指数
1
解决办法
145
查看次数