Errors
List of errors
	In this section we summarize all the possible exceptions that can occur in different methods of a multimethod:
| Exception | Methods | Cause | 
|---|---|---|
| BadNumberOfVirtualParameterTypesException | add() | The number of virtual parameter types of the method added is different from the one defined in the multimethod | 
| BadNonVirtualParameterTypesException | add() | The virtual parameter types of the method added are different from those defined in the multimethod | 
| BadReturnTypeException | add() | The return type of the method added is different from the one defined in the multimethod | 
| MethodNotAddedException | add() | The method cannot be added | 
| IllegalArgumentException | invoke() | A virtual argument is null | 
| NoMatchingMethodException | invoke(), check() | There is no matching method for the requested tuple of typles | 
| AmbiguousMethodException | invoke(), check() | It is not possible to select one matching method for the requested tuple of typles | 
| UnexpectedException | invoke(), check() | The method is not accessible | 
| User exception | invoke() | The called matching method throws an exception | 
For exceptions occuring in the add() methods, we remind that:
- The return type is defined by a call to returnType() or by the one of the first added method.
- The non virtual parameter types are defined by a call to nonVirtualParameterTypes() or by those of the first added method.
- The number of virtual parameter types is defined by the type of the multimethod i.e. Method1, Method2, Method3, Method4, Method5, Method6, Method7.