Minor note: The thing you get out of an interface object is an 'interface method', not a 'signature'. This matters because you can pass an interface method (instead of a method name) to a MethodSignature when performing a method call.