instanceof失败时什么是适当的异常。像这样:
if (user instanceof CustomerModel)
{
some logic...
}
else
{
throw new ClassCastException("Current user is not of type Customer");
}
}
我要使用ClassCastException,但是我不能100%地确定在这种情况下它是一个很好的选择。
答案 0 :(得分:1)
如果将此作为参数给出,我将使用:
抛出该错误表示方法已传递了非法或不适当的参数
如果这是由应用程序的状态定义的,则:
Java环境或Java应用程序的状态不适合请求的操作
否则,我认为您的ClassCastException没问题,但是正如所说的那样,那么您无需手动创建它,而是直接进行投射。
答案 1 :(得分:1)
就像伊兰(Eran)所说,如果您只想使用“行业标准” ClassCastException
,请尝试强制转换它,不要使用instanceof
。如果您想要自定义异常,那么这取决于您的意图。我们需要有关所需内容的更多信息,以便提供更好的示例。我会举一个随机的例子。
例如,如果您打算验证并传递方法参数或因自定义错误消息而失败,我通常会采用以下方法:
public static <T, S extends T> S requireType(Class<S> type, T actual, String varName) {
requireNonNull(actual, varName);
if (!type.isInstance(actual))
throw new IllegalArgumentException('\'' + varName + "' must be of type " +
type.getName() +": " + actual.getClass());
//noinspection unchecked // It is just checked
return (S)actual;
}
那些可怕的通用参数是自动处理的,例如:
FirmwarePacket castPacket = requireType(FirmwarePacket.class, packet, "packet");