在接受采访时,我最近被问到以下问题:
是否有其他方法可以在不使用Exception
的情况下创建自定义extends
:
Exception
Exception
类或子类RuntimeException
或RuntimeException
子类。给出什么可能的答案?
答案 0 :(得分:3)
如果不使用扩展异常类,就无法做到这一点。但是你可以在没有明确扩展......的情况下实现它。
public class Test {
public void method() {
throw new RuntimeException() {};
}
}
以上声明并抛出RuntimeException
的匿名子类。
当然,这是一件毫无意义的事情。由于该类是匿名的,因此您无法在throws
子句中对其进行命名,也不能在异常处理程序中按名称处理它。
另请参阅:Throw anonymous exceptions in Java
或者,您可以扩展Error
,Error
或.... Throwable
的子类。但你不应该。
Error
异常通常假定由JVM或标准库 1 定义和抛出。因此,Error
层次结构中的自定义子类(至少可以说是令人惊讶的)。Throwable
,则您需要承担中断代码,该代码假定Exception
和Error
是Throwable
的唯一子类。1 - 这不是javadoc所说的......但是人们认为是这样的。
答案 1 :(得分:2)
让我们创建一个自定义的 ResourceAlreadyExistsException 类。它将扩展 RuntimeException 类,您可以根据需要向其中添加任意数量的参数。我一直保持简洁。
public class ResourceAlreadyExistsException extends RuntimeException {
public ResourceAlreadyExistsException(String property, String value) {
super(String.format(
"Resource with property %s and value %s already exists." +
"Make sure to insert a unique value for %s",
property, value, property));
}
}
每当我需要检查唯一资源时,我都可以告诉用户哪个特定属性具有导致错误的值。此外,我会通知用户必须采取哪些措施才能避免错误。
比如说,我选择对我的 ResourceAlreadyExistsException 使用错误 ***。不过,我需要将此错误消息连接到 ExceptionResponseHandler。 extra 方法与我们通常为处理所有异常而创建的方法非常相似。事实上,您可以轻松地为所有异常复制粘贴此方法。您所要做的就是将 Exception 类更改为您的异常并更改 HttpStatus。.
@ExceptionHandler(ResourceAlreadyExistsException.class)
public final ResponseEntity<ExceptionResponse> handleResourceAlreadyExistsException(
ResourceAlreadyExistsException ex, WebRequest req) {
ExceptionResponse exceptionResponse = new ExceptionResponse(
new Date(),
ex.getMessage(),
req.getDescription(false)
);
return new ResponseEntity<>(exceptionResponse, HttpStatus.UNPROCESSABLE_ENTITY);
答案 2 :(得分:1)
可以扩展Throwable类。
答案 3 :(得分:1)
因为OP专门询问而不使用扩展(我认为你不能扩展像Throwable这样的类)你可以使用Exception
和参数:
throw new Exception("this is my custom exception");
现在,无论您何时捕获此异常,都可以查看消息,如
if(e.getMessage().equals("this is my custom exception")){
//TODO code here
}
现在我会解雇那些会像这样编写代码的人,但是为了采访的缘故哦......
答案 4 :(得分:0)
您可以扩展Throwable
,但不建议这样做。
答案 5 :(得分:0)
Java 中的自定义异常也称为用户定义的异常。在这个 Exception 类中可以由用户自己创建。异常消息、异常生成、异常句柄,一切由用户或开发者创建和管理。我们必须创建一个异常类,只是通过预定义的泛化异常类扩展它。
class UserDefineException extends Exception
{
public UserDefineException()
{
super(“Invalid Age Exception”);
}
}
public class TestDemo
{
public static void main(String[] args)
{
if(args.length ==0)
System.out.println(“Age”);
else
{
try
{
int age = Integer.parseInt(args[0]);
if(age<18 || age>60)
{
throw new UserDefineException();
}
else
{
System.out.println(“Group of Party”);
}
}
catch(UserDefineException e)
{
System.out.println(e);
}
}
System.out.println(“Normal Flow”);
}
}
有关更多信息,请查看此链接:https://arzatechs.com/how-to-use-custom-exception-in-java/
答案 6 :(得分:-1)
您可以导入异常而不是扩展它。只需导入包并在自定义例外中使用它。