Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试扣挡块_Java - Fatal编程技术网

Java 试扣挡块

Java 试扣挡块,java,Java,我的应用程序中有很多此类代码: String authUserId = null; try { authUserId = webTokenService.readUserIdFromToken(app.getMasterKey(), authToken); } catch (Exception e) { // do nothing } 对于每个片段,目标是在方法未抛出时分配一个值,否则为null。 尽管上面的代码可以工作,但它看起来确实是多余的,而且没有简化 什么Java库可以使代码

我的应用程序中有很多此类代码:

String authUserId = null;

try {
  authUserId = webTokenService.readUserIdFromToken(app.getMasterKey(), authToken);
} catch (Exception e) {
  // do nothing
}
对于每个片段,目标是在方法未抛出时分配一个值,否则为null。 尽管上面的代码可以工作,但它看起来确实是多余的,而且没有简化

什么Java库可以使代码更流畅?比如:

String authUserId = Try<String>.of(try -> {
   return webTokenService.readUserIdFromToken(app.getMasterKey(), authToken);
});
String authUserId=Try.of(Try->{
返回webTokenService.readUserIdFromToken(app.getMasterKey(),authToken);
});
或者更简单的

更新:

使用Vavr库

<dependency>
  <groupId>io.vavr</groupId>
  <artifactId>vavr</artifactId>
  <version>0.10.3</version>
</dependency>

io.vavr
vavr
0.10.3
解决这个问题的方法是:


String authUserId=Try.of(()->webTokenService.readUserIdFromToken(app.getMasterKey(),authToken)).get()

如果您完全接受该异常,则这是错误的。Baeldung有一个例外:

上述情况称为吞咽异常。大多数情况下,这样做对我们来说有点意义,因为它不能解决这个问题,而且它使其他代码也无法解决这个问题

我找到了一个实现这种行为的方法。然而,它已经有一段时间没有得到维护了。出于这个原因,我宁愿推荐。仍然需要处理异常。还可以从中获得更多教程。在文档中有一个将两个数字分开的小示例:

int除法(int除法,int除法){
回报股息/除数;
}
尝试除法(整数除数、整数除数){
返回(()->被除数/除数);
}

考虑到无声地吞咽异常是愚蠢的,没有

你自己写这样的东西完全是微不足道的:

class ShootMyselfInLegToolkit {
    @FunctionalInterface
    public interface PermissiveSupplier<T> {
        T supply() throws Exception;
    }

    public <T> T ohMyLegs(PermissiveSupplier<T> supplier) {
        try {
            return supplier.supply();
        } catch (Exception itHurts) {
            return null; // dear lord.
        }
    }
}
你不需要这样做:嘿,没有括号,所以我从不按enter键,因此这是“更少的代码行”,因此是“更简单”。。你的思维方式很奇怪

用你的话说,“流利”到底是什么意思?我认识到这个术语适用于setter、getter和builder方法,它的意思是:“无get/set前缀”。这显然不适用于这里,所以你显然认为它意味着其他东西。它不在JavaLang规范中,所以可能需要详细说明


除了愚蠢的格斗,我看不出这些东西是如何更容易理解或更容易编程的。我想大多数人都会同意,仅仅因为你发现java社区中常用的样式令人憎恶,就引入一大堆疯狂的库——这是一个糟糕的出路。以非惯用方式编写代码是一个坏主意,不管您使用何种语言,也不管您多么讨厌这种常见的样式。只是使用不同的语言,或者调整你的风格和品味。也许说起来容易做起来难,但无论如何——到目前为止,这是一个更好的主意。

捕获异常而不处理它们是一个糟糕的主意。我打算建议将
baddea.doItAnyway()
作为签名,但我更喜欢你的。我的版本使用了
Callable
而不是自定义接口。@rzwitserroot其实不仅仅是括号,这只是拥有更多可维护代码和更多超出问题范围的东西的第一步,而且你的代码是一个纯粹的语法错误。@quark是一个意外的额外@snuck;从代码中删除,现在可以很好地编译。
Tool.tryGet(() -> Files.readAllLines(Paths.get("foo.txt")), ioex -> { code to handle the exception });