【发布时间】:2020-12-20 01:10:40
【问题描述】:
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
这个方法有一个IBinder作为返回值,但是它只是抛出一个异常,我的问题不是关于服务,我的问题是为什么这个方法没有显示编译器错误?
如果我们写return null(如果我们不想实现这个方法)或者我们写抛出异常有什么不同?
【问题讨论】:
-
UnsupportedOperationException是“错误”,而不是“异常”。在这种情况下,它的目的是让应用程序在运行时崩溃,以此告诉您您忘记了做某事,因此在这种情况下返回null不会达到预期目的 -
@MadProgrammer 由于
UnsupportedOperationException的名称中有“异常”一词,并且继承自Exception,因此将其称为异常似乎足够公平。 -
@khelwood 公平点 - 这是
RuntimeException- 意图保持不变(过去几年一直在使用 Swift,所以我现在习惯于声明异常意图:P) - 我会争辩说,在这种情况下,其意图不是catch异常,而是允许应用程序崩溃以提醒开发人员他们应该在这里做点什么——如果他们选择返回null,那就是他们选择的实施细节 -
异常可能会被其他类捕获。