If the Java standard library doesn't contain an exception that fits with the business requirements of your application, you can implement your own exception. All exceptions that inherit the Error class must be thrown by the Java Virtual Machine, so we shouldn't extend this class. If you decide to implement your own exception, you should prefer to create only checked exceptions because, if you throw an exception with the RuntimeException type, there is no guarantee that it will be caught in Java code. In Kotlin, you can extend any subtype of the Exception class because Kotlin doesn't support a checked exception.
Let's suggest that we want to develop a ToDo list application that contains the ToDoStorage class, which contains the set method and throws ToDoAlreadyExistException. The ToDoStorage class may look as follows:
class ToDoStorage...