@Retention(value=CLASS)
@Target(value=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 and Description |
|---|---|
java.lang.Class<?>[] |
value
Specifies the return types.
|
| Modifier and Type | Optional Element and Description |
|---|---|
java.lang.String |
adapterMethod
Specifies the method to convert return value.
|
boolean |
castRequired
Specifies whether the injected bridge methods should perform a cast prior to returning.
|
public abstract java.lang.Class<?>[] value
castRequired() should be set to true.public abstract boolean castRequired
Copyright © 2021. All Rights Reserved.