org.eclipse.jdt.core.dom

## Interface IMethodBinding

All Superinterfaces:
  IBinding

    public interface IMethodBinding
    extends IBinding

A method binding represents a method or constructor of a class or interface. Method bindings usually correspond directly to method or constructor declarations found in the source code. However, in certain cases of references to a generic method, the method binding may correspond to a copy of a generic method declaration with substitutions for the method's type parameters (for these, `getTypeArguments` returns a non-empty list, and either `isParameterizedMethod` or `isRawMethod` returns `true`). And in certain cases of references to a method declared in a generic type, the method binding may correspond to a copy of a method declaration with substitutions for the type's type parameters (for these, `getTypeArguments` returns an empty list, and both `isParameterizedMethod` and `isRawMethod` return `false`).

Since:
  2.0
See Also:
  `ITypeBinding.getDeclaredMethods()`
Restriction:
  This interface is not intended to be implemented by clients.

### Field Summary

### Fields inherited from interface org.eclipse.jdt.core.dom.IBinding

`ANNOTATION, MEMBER_VALUE_PAIR, METHOD, PACKAGE, TYPE, VARIABLE`

### Method Summary

All Methods Instance Methods Abstract Methods
`ITypeBinding` `getDeclaredReceiverType()` Returns the type of this method's receiver or `null` if there is no receiver declared explicitly.
`ITypeBinding` `getDeclaringClass()` Returns the type binding representing the class or interface that declares this method or constructor.
`IBinding` `getDeclaringMember()` If this method binding represents a lambda expression then: If the lambda expression is declared in the body of a method, answers the binding of that declaring method.
`Object` `getDefaultValue()` Returns the resolved default value of an annotation type member, or `null` if the member has no default value, or if this is not the binding for an annotation type member.
`ITypeBinding[]` `getExceptionTypes()` Returns a list of type bindings representing the types of the exceptions thrown by this method or constructor.
`IMethodBinding` `getMethodDeclaration()` Returns the binding for the method declaration corresponding to this method binding.
`String` `getName()` Returns the name of the method declared in this binding.
`IAnnotationBinding[]` `getParameterAnnotations(int paramIndex)` Returns the resolved declaration annotations of a parameter of this method.
`ITypeBinding[]` `getParameterTypes()` Returns a list of type bindings representing the formal parameter types, in declaration order, of this method or constructor.
`ITypeBinding` `getReturnType()` Returns the binding for the return type of this method.
`ITypeBinding[]` `getTypeArguments()` Returns the type arguments of this generic method instance, or the empty list for other method bindings.
`ITypeBinding[]` `getTypeParameters()` Returns the type parameters of this method or constructor binding.
`boolean` `isAnnotationMember()` Returns whether this is the binding for an annotation type member.
`boolean` `isConstructor()` Returns whether this binding is for a constructor or a method.
`boolean` `isDefaultConstructor()` Returns whether this binding is known to be a compiler-generated default constructor.
`boolean` `isGenericMethod()` Returns whether this method binding represents a declaration of a generic method.
`boolean` `isParameterizedMethod()` Returns whether this method binding represents an instance of a generic method corresponding to a parameterized method reference.
`boolean` `isRawMethod()` Returns whether this method binding represents an instance of a generic method corresponding to a raw method reference.
`boolean` `isSubsignature(IMethodBinding otherMethod)` Returns whether this method's signature is a subsignature of the given method as specified in section 8.4.2 of The Java Language Specification, Third Edition (JLS3).
`boolean` `isVarargs()` Returns whether this is a variable arity method.
`boolean` `overrides(IMethodBinding method)` Returns whether this method overrides the given method, as specified in section 8.4.8.1 of The Java Language Specification, Third Edition (JLS3).

### Methods inherited from interface org.eclipse.jdt.core.dom.IBinding

`equals, getAnnotations, getJavaElement, getKey, getKind, getModifiers, isDeprecated, isEqualTo, isRecovered, isSynthetic, toString`

### Method Detail

#### isConstructor

    boolean isConstructor()

Returns whether this binding is for a constructor or a method.

Returns:
  `true` if this is the binding for a constructor, and `false` if this is the binding for a method

#### isDefaultConstructor

    boolean isDefaultConstructor()

Returns whether this binding is known to be a compiler-generated default constructor.

This method returns `false` for:

- methods
- constructors with more than one parameter
- 0-argument constructors where the binding information was obtained from a Java source file containing an explicit 0-argument constructor declaration
- 0-argument constructors where the binding information was obtained from a Java class file (it is not possible to determine from a class file whether a 0-argument constructor was present in the source code versus generated automatically by a Java compiler)

Returns:
  `true` if this is known to be the binding for a compiler-generated default constructor, and `false` otherwise
Since:
  3.0

#### getName

    String getName()

Returns the name of the method declared in this binding. The method name is always a simple identifier. The name of a constructor is always the same as the declared name of its declaring class.

Specified by:
  `getName` in interface `IBinding`
Returns:
  the name of this method, or the declared name of this constructor's declaring class

#### getDeclaringClass

    ITypeBinding getDeclaringClass()

Returns the type binding representing the class or interface that declares this method or constructor.

Returns:
  the binding of the class or interface that declares this method or constructor

#### getDeclaringMember

    IBinding getDeclaringMember()

If this method binding represents a lambda expression then:

- If the lambda expression is declared in the body of a method, answers the binding of that declaring method.
- Otherwise, if the lambda expression is declared in the initializer of a field, answers the binding of that declaring field.
- Otherwise, if the lambda expression is declared in a static initializer or an instance initializer, a method binding is returned to represent that initializer (selector is an empty string in this case).

If this method binding does not represent a lambda expression, `null` is returned.

Returns:
  a method binding or field binding representing the member that contains the lambda expression represented by this method binding, or null for regular method bindings.
Since:
  3.11

#### getDefaultValue

    Object getDefaultValue()

Returns the resolved default value of an annotation type member, or `null` if the member has no default value, or if this is not the binding for an annotation type member.

Resolved values are represented as follows (same as for `IMemberValuePairBinding.getValue()`):

- Primitive type - the equivalent boxed object
- java.lang.Class - the `ITypeBinding` for the class object
- java.lang.String - the string value itself
- enum type - the `IVariableBinding` for the enum constant
- annotation type - an `IAnnotationBinding`
- array type - an `Object[]` whose elements are as per above (the language only allows single dimensional arrays in annotations)

Returns:
  the default value of this annotation type member, or `null` if none or not applicable
Since:
  3.2

#### getParameterAnnotations

    IAnnotationBinding[] getParameterAnnotations(int paramIndex)

Returns the resolved declaration annotations of a parameter of this method. The result returned is the same regardless of whether this is a parameterized method.

Note: This method only returns declaration annotations. Type annotations in the sense of JLS8 9.7.4 are not returned. Type annotations can be retrieved from a parameter type via `ITypeBinding.getTypeAnnotations()`.

Parameters:
  `paramIndex` - the index of the parameter of interest
Returns:
  the resolved declaration annotations of the `paramIndex`th parameter, or an empty list if there are none
Throws:
  `ArrayIndexOutOfBoundsException` - if `paramIndex` is not a valid index
Since:
  3.2

#### getParameterTypes

    ITypeBinding[] getParameterTypes()

Returns a list of type bindings representing the formal parameter types, in declaration order, of this method or constructor. Returns an array of length 0 if this method or constructor does not takes any parameters.

Note that the binding for the last parameter type of a vararg method declaration like `void fun(Foo... args)` is always for an array type (i.e., `Foo[]`) reflecting the the way varargs get compiled. However, the type binding obtained directly from the `SingleVariableDeclaration` for the vararg parameter is always for the type as written; i.e., the type binding for `Foo`.

Note: The result does not include synthetic parameters introduced by inner class emulation. Explicit receiver parameters are also not included.

Returns:
  a (possibly empty) list of type bindings for the formal parameters of this method or constructor

#### getDeclaredReceiverType

    ITypeBinding getDeclaredReceiverType()

Returns the type of this method's receiver or `null` if there is no receiver declared explicitly.

Returns:
  the type of this method's receiver or `null` if there is no receiver declared explicitly.
Since:
  3.10

#### getReturnType

    ITypeBinding getReturnType()

Returns the binding for the return type of this method. Returns the special primitive `void` return type for constructors.

For methods, the type binding that is returned contains type annotations if any. For e.g. the following code would get the type annotations on a method:
`IAnnotationBinding[] annots = getReturnType().getTypeAnnotations()`

For a constructor, the returned binding does not include type annotations.

Returns:
  the binding for the return type of this method, or the `void` return type for constructors

#### getExceptionTypes

    ITypeBinding[] getExceptionTypes()

Returns a list of type bindings representing the types of the exceptions thrown by this method or constructor. Returns an array of length 0 if this method throws no exceptions. The resulting types are in no particular order.

Returns:
  a list of type bindings for exceptions thrown by this method or constructor

#### getTypeParameters

    ITypeBinding[] getTypeParameters()

Returns the type parameters of this method or constructor binding.

Note that type parameters only occur on the binding of the declaring generic method. Type bindings corresponding to a raw or parameterized reference to a generic method do not carry type parameters (they instead have non-empty type arguments and non-trivial erasure).

Returns:
  the list of binding for the type variables for the type parameters of this method, or otherwise the empty list
Since:
  3.1
See Also:
  `ITypeBinding.isTypeVariable()`

#### isAnnotationMember

    boolean isAnnotationMember()

Returns whether this is the binding for an annotation type member.

Returns:
  `true` iff this is the binding for an annotation type member and `false` otherwise
Since:
  3.2

#### isGenericMethod

    boolean isGenericMethod()

Returns whether this method binding represents a declaration of a generic method.

Note that type parameters only occur on the binding of the declaring generic method; e.g., `public <T> T identity(T t);`. Method bindings corresponding to a raw or parameterized reference to a generic method do not carry type parameters (they instead have non-empty type arguments and non-trivial erasure). This method is fully equivalent to `getTypeParameters().length > 0)`.

Note that `isGenericMethod()`, `isParameterizedMethod()`, and `isRawMethod()` are mutually exclusive.

Returns:
  `true` if this method binding represents a declaration of a generic method, and `false` otherwise
Since:
  3.1
See Also:
  `getTypeParameters()`

#### isParameterizedMethod

    boolean isParameterizedMethod()

Returns whether this method binding represents an instance of a generic method corresponding to a parameterized method reference.

Note that `isGenericMethod()`, `isParameterizedMethod()`, and `isRawMethod()` are mutually exclusive.

Returns:
  `true` if this method binding represents a an instance of a generic method corresponding to a parameterized method reference, and `false` otherwise
Since:
  3.1
See Also:
  `getMethodDeclaration()`, `getTypeArguments()`

#### getTypeArguments

    ITypeBinding[] getTypeArguments()

Returns the type arguments of this generic method instance, or the empty list for other method bindings.

Note that type arguments only occur on a method binding that represents an instance of a generic method corresponding to a raw or parameterized reference to a generic method. Do not confuse these with type parameters which only occur on the method binding corresponding directly to the declaration of a generic method.

Returns:
  the list of type bindings for the type arguments used to instantiate the corrresponding generic method, or otherwise the empty list
Since:
  3.1
See Also:
  `getMethodDeclaration()`, `isParameterizedMethod()`, `isRawMethod()`

#### getMethodDeclaration

    IMethodBinding getMethodDeclaration()

Returns the binding for the method declaration corresponding to this method binding.

- For parameterized methods (`isParameterizedMethod()`) and raw methods (`isRawMethod()`), this method returns the binding for the corresponding generic method.
- For references to the method `Object.getClass()`, returns the binding for the method declaration which is declared to return `Class<?>` or `Class<? extends Object>`. In the reference binding, the return type becomes `Class<? extends` R`>`, where R is the erasure of the static type of the receiver of the method invocation.
- For references to a signature polymorphic method from class MethodHandle, returns the declaration of the method. In the reference binding, the parameter types and the return type are determined by the concrete invocation context.
- For lambda methods, returns the (possibly parameterized) single abstract method of the functional type.
- For other method bindings, this returns the same binding.

Returns:
  the method binding
Since:
  3.1

#### isRawMethod

    boolean isRawMethod()

Returns whether this method binding represents an instance of a generic method corresponding to a raw method reference.

Note that `isGenericMethod()`, `isParameterizedMethod()`, and `isRawMethod()` are mutually exclusive.

Returns:
  `true` if this method binding represents a an instance of a generic method corresponding to a raw method reference, and `false` otherwise
Since:
  3.1
See Also:
  `getMethodDeclaration()`, `getTypeArguments()`

#### isSubsignature

    boolean isSubsignature(IMethodBinding otherMethod)

Returns whether this method's signature is a subsignature of the given method as specified in section 8.4.2 of The Java Language Specification, Third Edition (JLS3).

Returns:
  `true` if this method's signature is a subsignature of the given method
Since:
  3.1

#### isVarargs

    boolean isVarargs()

Returns whether this is a variable arity method.

Note: Variable arity ("varargs") methods were added in JLS3.

Returns:
  `true` if this is a variable arity method, and `false` otherwise
Since:
  3.1

#### overrides

    boolean overrides(IMethodBinding method)

Returns whether this method overrides the given method, as specified in section 8.4.8.1 of The Java Language Specification, Third Edition (JLS3).

Parameters:
  `method` - the method that is possibly overriden
Returns:
  `true` if this method overrides the given method, and `false` otherwise
Since:
  3.1