当前位置: 首页 > 面试题库 >

有没有办法让Runnable的run()抛出异常?

秦斌
2023-03-14
问题内容

我在实现Runnable的类中的run()中调用的方法被设计为引发异常。

但是Java编译器不允许我这样做,建议我用try / catch包围它。

问题是,通过用try / catch包围它,我使 特定的
run()无效了。我
确实 想抛出该异常。

如果我指定throws的run()的本身,编译器会抱怨说Exception is not compatible with throws clause in Runnable.run()

通常,我对run()不会抛出异常完全满意
。但是,在我必须具有该功能的特殊情况下。

如何解决此限制?


问题答案:

如果你想传递一个类,它实现RunnableThread框架,那么你必须通过该框架的规则玩,见欧内斯特·弗里德曼-
希尔的回答,为什么这样做,否则是一个坏主意。

不过,我有一种直觉,您想run直接在代码中调用方法,以便您的调用代码可以处理异常。

这个问题的答案很简单。不要使用RunnableThread库中的接口,而是使用修改后的签名创建自己的接口,该签名允许抛出被检查的异常,例如

public interface MyRunnable
{
    void myRun ( ) throws MyException;
}

您甚至可以创建一个适配器,将该适配器转换为Runnable适合在Thread框架中使用的真实接口(通过处理检查的异常)。



 类似资料:
  • 我在实现Runnable的类的run()中调用的方法被设计为引发异常。 但是Java编译器不允许我这样做,建议我用try/catch来围绕它。 问题是,通过使用try/catch将其包围,我使特定的run()变得无用。我确实想抛出该异常。 如果我为run()本身指定了throws,编译器会抱怨异常与Runnable中的throws子句不兼容。run()。 通常情况下,我完全可以不让run()抛出异

  • 问题内容: 我有一个使用处理程序发布可运行实例的线程。它工作得很好,但是我很好奇我如何将参数传递给Runnable实例使用?也许我只是不了解此功能的工作原理。 为了避免出现“您为什么需要此问题”的问题,我有一个线程化的动画,必须调出UI线程来告诉它实际绘制的内容。 问题答案: 只需使用接受参数的构造函数实现的类就可以了, 您可以使用参数化构造函数创建Runnable类的实例。

  • 背景: 所以我有一个方法调用,我想保存到一个文本文件中。这样做的目的是将可运行的序列化对象保存到文本文件中,并在以后从文本文件中获取要执行的对象。 错误是: 我理解错误,Runnable是一个接口,它不能被序列化。然而,我还能做些什么来解决我的问题吗? 解决方案尝试1。错误

  • 根据JCIP第6.3.2节: Runnable是一个相当有限的抽象;run无法返回值或引发选中的异常。 无法返回值,因为其返回类型为void,但为什么不能引发选中的异常?

  • 所以我正在做一个需要xml模式的小项目,我对这个模式很不熟悉。 我希望能够设置模式以在两组属性之间进行选择,根据我的研究,这在XSD 1.0中是不可能的,但显然是XSD 1.1的一个特性。 目前我正在使用VisualStudio来完成我的工作,它似乎被困在XSD1.0模式中,这是有意义的,因为XSD1.1显然是一个最新的开发。 我的问题是,是否有一个插件/扩展可以让我在Visual Studio中

  • 我有一个函数在某些情况下返回null,比如: 我想做另一个函数,它做完全相同的事情,除了它抛出一个错误,而不是返回null如果满足这个条件。我试着这么做: 不幸的是,Java不喜欢这样做,并在“throw”令牌上给我一个语法错误(并告诉我它不能从IllegalArgumentException转换为Double)。我能想到的唯一其他方法是这样的: 这当然是完全好的,我只是想知道是否有一种方法可以在