GVKun编程网logo

是否CompletionStage总是将异常包装在CompletionException中?(是否异常报告array)

9

针对是否CompletionStage总是将异常包装在CompletionException中?和是否异常报告array这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.conn.Manag

针对是否CompletionStage总是将异常包装在CompletionException中?是否异常报告array这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.conn.ManagedClientConnectionImpl@604ed9f0 java.net.ConnectException: Connection refused: connect、android studio 4.1 中的 MultipleCompilationErrorsException、AutoCompleteTextView onCommitCompletion 不起作用、bash-completion – 在第一次调用命令时定义的completion函数等相关知识,希望可以帮助到你。

本文目录一览:

是否CompletionStage总是将异常包装在CompletionException中?(是否异常报告array)

是否CompletionStage总是将异常包装在CompletionException中?(是否异常报告array)

该CompletionStage的Javadoc状态:

[…]如果阶段的计算由于(未经检查的)异常或错误而突然终止,则所有需要完成该过程的从属阶段也会异常完成,并且CompletionException将异常作为其原因。

看到异常完成总是将异常包装在CompletionException为什么中exceptionally()whenComplete()并且handle()将异常表示为Throwable而不是CompletionException

这很重要,因为它可以防止人们直接在这些方法中引发异常。

这些方法是否可能收到除以外的其他异常CompletionException?还是我可以安全地强制使用这种类型的演员?

(我在本地运行了一些测试,并浏览了CompletableFuture源代码,乍看之下,我不知道如何抛出任何其他类型的异常。)

答案1

小编典典

这些方法是否可能收到除以外的其他异常 CompletionException

是的,有可能,并且您不应该CompletionException未经instanceof检查(或检查使用情况)而投身到。

举个例子

CompletableFuture<Void> root = new CompletableFuture<>();root.whenComplete((v, t) -> {    System.out.println(t.getClass()); // class java.io.IOException});root.completeExceptionally(new IOException("blow it up"));

whenComplete将收到IOException而不是CompletionException包装它。同样的行为适用于exceptionallyhandle


阶段的计算在Javadoc中定义:

由一个阶段执行的计算可被表达为一个Function
ConsumerRunnable根据(使用名称,包括应用,接受或运行,分别方法)是否需要参数和/或产生的结果。

我相信这句话

如果阶段的计算由于(未经检查的)异常或错误而突然终止

指的是其中的一个Function#applyConsumer#acceptRunnable#run方法突然终止,因为一个的抛出的异常,而不是因为一个阶段格外通过一些其他机制完成。

另请注意,Javadoc说

该界面未定义用于初始创建,强制正常或 异常
强制完成,探查完成状态或结果或等待阶段完成的方法。的实现CompletionStage可以酌情提供实现这种效果的手段

换句话说,该接口允许实现在不突然终止任何计算的情况下出色地完成阶段。我认为这允许新的行为。


如果我们从以前扩展我的例子

CompletableFuture<Void> root = new CompletableFuture<>();CompletableFuture<Void> child = root.whenComplete((v, t) -> {    System.out.println(t.getClass()); // class java.io.Exception});child.whenComplete((v, t) -> {    System.out.println(t.getClass()); // class java.util.concurrent.CompletionException});root.completeExceptionally(new IOException("blow it up"));

您会注意到随附的完成文件会child收到CompletionException原始文件的包装IOException。从Javadoc来看,这对我来说并不明显

返回一个新的,CompletionStage具有与该阶段 相同的 结果或 异常

总而言之,似乎来自a的原始异常completeExceptionally被传递给直接的从属,而从属的从属却收到一个封闭的CompletionException

.conn.ManagedClientConnectionImpl@604ed9f0 java.net.ConnectException: Connection refused: connect

.conn.ManagedClientConnectionImpl@604ed9f0 java.net.ConnectException: Connection refused: connect

DEBUG 2016-11-07 14:32:47,518  Get connection for route {}->http://127.0.0.1:8087->http://rdsearch.zhaopin.com:80
DEBUG 2016-11-07 14:32:47,519  Connecting to 127.0.0.1:8087
DEBUG 2016-11-07 14:32:48,530  Connection org.apache.http.impl.conn.DefaultClientConnection@91161c7 closed
DEBUG 2016-11-07 14:32:48,531  Connection org.apache.http.impl.conn.DefaultClientConnection@91161c7 shut down
DEBUG 2016-11-07 14:32:48,532  Releasing connection org.apache.http.impl.conn.ManagedClientConnectionImpl@604ed9f0
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)

android studio 4.1 中的 MultipleCompilationErrorsException

android studio 4.1 中的 MultipleCompilationErrorsException

如何解决android studio 4.1 中的 MultipleCompilationErrorsException?

您好,每次创建项目时,我都会遇到以下问题:Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup Failed:

我尝试更改 gradle 版本,但没有用。

解决方案必须适用于android studio 4.1

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

AutoCompleteTextView onCommitCompletion 不起作用

AutoCompleteTextView onCommitCompletion 不起作用

如何解决AutoCompleteTextView onCommitCompletion 不起作用?

我正在创建一个带有一堆用于帐户注册的片段的应用程序,其中每个片段都允许输入一段数据(即不是一个长表格,而是多个片段,每个片段都询问一两个问题,并且附加所有片段到一项活动)。为了保持 UI 状态,我在片段之间使用共享视图模型,并在 onCreateView(...) 中检查此视图模型的值并相应地更新 UI,并将值保存到每个片段的 onPause() 中的视图模型

我的问题是使用过去的数据在 AutoCompleteTextView 中“重新填充”。

if (model.hasUser()) {
            model.getUser().observe(getViewLifecycleOwner(),user -> {
                String gender = ((Respondent)user).getGender();
                if (!gender.equals("")){
                    if (Arrays.asList(getResources().getStringArray(R.array.genders)).contains(gender)){
                        et_gender.showDropDown();
                        et_gender.onCommitCompletion(new CompletionInfo(0,Arrays.asList(getResources().getStringArray(R.array.genders)).indexOf(gender),gender));
                } else {
                    et_gender.showDropDown();
                    et_gender.onCommitCompletion(new CompletionInfo(0,4,"Other"));
                    et_gender_other.getEditText().setText(gender);
                }
            }

    });
}
@H_301_7@

这里的问题是 onCommitCompletion,它调用 AutoCompleteTextView 的 onClickListener,但传入的位置值为 -1,而不是实际位置。一个简单的解决方法是将 onClickListener 的方法放在它自己的方法中并简单地调用它,但我宁愿让它以这种方式工作。有人知道出了什么问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

bash-completion – 在第一次调用命令时定义的completion函数

bash-completion – 在第一次调用命令时定义的completion函数

我添加了一个新的别名scp_using_rsync,它使用rsync通过SSH复制文件和某些选项.我想将scp的bash完成链接到此别名.

当我添加这一行时,它可以工作:

complete -o bashdefault -o default -o nospace -F _scp scp_using_rsync 2>/dev/null || complete -o default -o nospace -F _scp scp_using_rsync

唯一的问题是我注意到,_scp在我的bash环境中定义,只有在我尝试使用ssh / scp在该shell中至少执行一次tab-completion之后.所以,如果我在新shell中直接运行scp_using_rsync,我会得到_scp not found错误.

在为ssh或scp命令尝试制表符完成之前和之后,新shell中的typeset -F输出清楚地表明在第一次尝试制表符完成后定义了以下函数:

$diff ~/.scratch/file1 ~/.scratch/file2
224a225,227
> declare -f _scp
> declare -f _scp_local_files
> declare -f _scp_remote_files
226a230
> declare -f _sftp
230a235,240
> declare -f _ssh
> declare -f _ssh_ciphers
> declare -f _ssh_macs
> declare -f _ssh_options
> declare -f _ssh_suboption
> declare -f _ssh_suboption_check

这些函数似乎在我的系统中的/usr/share / bash-completion / completions / ssh中定义.

这些是我的两个相互关联的问题:

> bash如何确定自动获取定义的位置,并在首次尝试完成时定义它们?
>我应该如何以类似的方式将scp_using_rsync的bash-completion链接到scp的bash完成?

Bash 4.1为complete,compgen和compopt添加了一个新的-D选项:

New complete/compgen/compopt -D option to define a `default’ completion:
a completion to be invoked on command for which no completion has been
defined
. If this function returns 124,programmable completion is
attempted again,allowing a user to dynamically build a set of completions
as completion is attempted by having the default completion function
install individual completion functions each time it is invoked.

bash的手册有一个例子:

_completion_loader()
{
     . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
}
complete -D -F _completion_loader

关于是否CompletionStage总是将异常包装在CompletionException中?是否异常报告array的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于.conn.ManagedClientConnectionImpl@604ed9f0 java.net.ConnectException: Connection refused: connect、android studio 4.1 中的 MultipleCompilationErrorsException、AutoCompleteTextView onCommitCompletion 不起作用、bash-completion – 在第一次调用命令时定义的completion函数的相关信息,请在本站寻找。

本文标签: