@Retention(CLASS) @Target(METHOD) @Documented @Indexed public @interface WithBridgeMethods
For example, if you have the following code:
@WithBridgeMethods(Foo.class) public FooSubType getFoo() { ... }
The Maven mojo will insert the following bridge method:
public Foo getFoo() { return getFoo(); // invokevirtual to getFoo() that returns FooSubType }
In some cases, it's necessary to widen the return type of a method, but in a way that legacy
calls would still return instances of the original type. In this case, add
castRequired=true
to the annotation. For example, if you have the
following code:
@WithBridgeMethods(value=FooSubType.class, castRequired=true) public <T extends Foo> createFoo(Class<T> clazz) { return clazz.newInstance(); }
The Maven mojo will insert the following bridge method:
public FooSubType createFoo(Class clazz) { return (FooSubType) createFoo(clazz); // invokeVirtual to createFoo that returns Foo }
In extreme cases, this method can add a method whose return type has nothing to do with the return type of the declared method. For example, if you have the following code:
@WithBridgeMethods(value=String.class, adapterMethod="convert") public URL getURL() { URL url = .... return url; } private Object convert(URL url, Class targetType) { return url.toString(); }
The Maven mojo will insert the following bridge method:
public String getURL() { return (String)convert(getURL(),String.class); // invokeVirtual to getURL that returns URL }
The specified adapter method must be a method specified on the current class or its ancestors. It cannot be a static method.
Modifier and Type | Required Element | Description |
---|---|---|
Class<?>[] |
value |
Specifies the return types.
|
Modifier and Type | Optional Element | Description |
---|---|---|
String |
adapterMethod |
Specifies the method to convert return value.
|
boolean |
castRequired |
Specifies whether the injected bridge methods should perform a cast prior to returning.
|
Class<?>[] value
castRequired()
should be set to true.boolean castRequired
String adapterMethod
Copyright © 2018. All rights reserved.