问题标签 [throwable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在 Java 中扩展 Throwable
Java 允许您创建一个全新的子类型Throwable
,例如:
现在,很少,我可能会做这样的事情:
当然还有其他地方:
我的问题是:
- 这是一个坏主意吗?如果是这样,为什么?
- 如果这是一个坏主意,可以做些什么来防止这种子类型化?
- 由于它是不可预防的(据我所知),可能会导致什么灾难?
- 如果这不是一个坏主意,为什么不呢?
- 你怎么能做出有用的事情
extends Throwable
呢?
- 你怎么能做出有用的事情
提议的场景#1
我真的很想做这样的事情的场景具有以下属性:
- “事件”是最终会发生的事情。预计。_ 它绝对不是一个,而且它什么时候发生
Error
也没有-al 。Exception
- 因为在意料之中,所以会有一个
catch
等待。它不会“溜走”任何东西。它不会“逃避”任何对catch
一般Exception
和/或Error
.
- 因为在意料之中,所以会有一个
- “事件”很少发生。
- 当它发生时,通常会有很深的堆栈跟踪。
所以也许现在我想说的很清楚:FlyingPig
是穷举递归搜索的结果。
要搜索的对象是存在的:只要在搜索空间的大海中找到它。搜索过程将是一个漫长的过程,因此异常处理相对昂贵的成本可以忽略不计。事实上,使用boolean isFound
标志的传统控制流构造替代方案可能更昂贵,因为它必须在整个搜索过程中不断检查,很可能在递归的每个级别。此检查将在 99.99% 的情况下失败,但传播终止条件是绝对必要的。在某种程度上,虽然有效,但检查效率低下!
通过在找到所寻找的对象时简单地throw
-ing a FlyingPig
,您不必将代码与boolean isFound
标志的管理混为一谈。不仅在这方面代码更干净,而且由于这个遗漏它可能运行得更快。
总而言之,选择是在这两者之间:
- 传统的控制流方法
- 使用 a
boolean isFound
,连续检查 - 99.99% 的时间,支票是一种“浪费”,因为它仍然是
false
- 当它最终变成 时
true
,你停止递归,你必须确保你可以正确地放松到最初的调用。
- 使用 a
FlyingPig
方法- 不要打扰任何
boolean isFound
. - 如果找到,就
throw new FlyingPig()
; 这是预期的,所以会有一个catch
。 - 没有
boolean
标志管理,如果你需要继续前进,没有浪费的检查,没有手动展开递归的簿记等。
- 不要打扰任何
问题:
- 这种(ab)使用异常的技术是否有效?(有名字吗?)
- 如果有效,应该
FlyingPig extends Throwable
,还是Exception
很好?(即使它的情况没有什么特别的?)
java - 在 weblogic 服务器的上下文中,关于“避免捕获可抛出”的良好文档
我目前正在重构现有的代码库 (EJB),以删除在 EJB 中捕获 Throwable 的所有块。
我想/需要用适当的文档来说服我周围的人“捕捉 Throwable”对于 EJB 来说是不行的(我们对此进行了很多讨论)。Weblogic 将处理所有“错误”情况,并可能使 EJB 无效并将新的(工作的)EJB 放入池中。捕获 Throwable 会破坏 weblogic 提供的所有这些安全网,并且捕获 Throwable 无论如何都是不好的做法(但这里的人们不情愿并到处使用“Throwable”锤子)。
有没有人能指出一些解释这种行为的在线文档(对于 weblogic、jboss 等)。我通过谷歌搜索并查看了 weblogic 文档,但找不到任何东西,只是通用的 java 文档。
java - 关于 Java.lang.Error 的问题
有很多帖子java.lang.Error
说它不应该被抓住。我的问题是它是否不应该被关注它的用途是什么。因为它是 Throwable 所以我们可以在 try catch 中捕获它。我读了一些帖子,比如只有在某些情况下才应该被抓住,如何知道这些情况。
简而言之,我想知道当我捕获错误时会出现什么问题。它背后的过程是什么。为什么他们制作了 Error 及其子类?如果我的应用程序不应该捕获它们,那么什么会捕获它们?为什么我的代码无法处理这个捕获的错误?如果我只是捕获一个错误并在 Catch 块中编写一些处理代码,那么该代码不会运行吗?
java - Is it possible to throw a java exception through the calling method of a base class that does not throw exceptions?
This may be a ridiculous Java question about exception handling, but I have a UI actor (an Android Activity) that is requesting services from my subclass of ContentProvider. The subclass wants to throw some exceptions when sd-card is full, sd-card is missing, network i/o errros, etc. However, when I code the CP-subclass to throw my exceptions, the compiler offers to add the exceptions to the CP class. Obviously, I don't want to modify the base class, but I want the UI to catch the sub-class' exceptions.
Make sense? Is this possible? If not, is there a better pattern for my service subclass to get its throwable object back to the UI?
java - 异常处理:throw、throws 和 Throwable
你们中的任何人都可以解释 之间有什么区别throw
,throws
以及Throwable
何时使用哪个?
java - 为什么 java.lang.Throwable 不是抽象类?
可能重复:why-is-java-lang-throwable-a-class
你好!我不明白为什么 Throwable 不是抽象类。我只看到一个用例:在日志系统中找出调用层次结构。但它可以是这个或其他类的一些静态方法。所以为什么?)
谢谢。
更新
来自 java.util.logging.LogRecord
为什么它不能Throwable.getStackTrace();
或在 java.lang.Thread 中
这样我们就可以避免throw new Throwable();
来自 javadoc 的upd2
Throwable 类是 Java 语言中所有错误和异常的超类。
所以,作为一个超类,它应该是抽象的,恕我直言。根据这个定义,使用它来获取堆栈跟踪并不是一个好例子。
java - 我的工厂课有什么问题吗?
我并不完全习惯于处理异常,因此我只是抛出它们,但是在我使用使用这个工厂的方法的任何地方,它告诉我我必须抛出像 throwable 这样的异常。
例如,在我的一个类中,我有一个使用工厂方法实例化大量对象的方法。我可以通过抛出异常来使用该类中的方法,但是如果我尝试将该类的引用传递给另一个类,然后从那里使用该方法,它将不起作用。然后它迫使我尝试捕获异常。
我可能不需要工厂,但它看起来很有趣,我想尝试使用模式。我创建工厂的原因是我有 6 个 Piece 子类,我不想通过将我想要的子类类型作为参数传递给方法来使用方法来实例化它们。
blackberry - 在 Blackberry Java 中捕获 Throwable:好主意?
我经常在 Blackberry 文档中看到 Throwable 的 catch 子句,例如Network API docs。我的感觉是,这在 Java 中通常不是一个好的做法。
黑莓编程中有这个原因吗?
它是否与Throwables的堆栈跟踪生成有关?
java - JUnit @Test 预期的注释不起作用
我有以下测试:
但是 JUnit 报告说,测试失败了,尽管它按照预期抛出了一个IllegalStateException
.
我是否必须配置其他东西才能运行?
我现在运行测试
就像在这个问题中一样,但仍然没有得到想要的结果。
当我删除test
前缀时,我仍然遇到错误。
我得说我使用 Eclipse 运行这些测试,但它被配置为使用 JUnit 4 Runner。
java - 捕获 Throwable 是一种不好的做法吗?
抓住是一种不好的做法Throwable
吗?
例如这样的:
这是一种不好的做法,还是我们应该尽可能具体?