How to find the first declaring method for a reference method
Posted
by Oliver Gierke
on Stack Overflow
See other posts from Stack Overflow
or by Oliver Gierke
Published on 2010-05-10T17:31:46Z
Indexed on
2010/05/10
17:34 UTC
Read the original article
Hit count: 336
Suppose you have a generic interface and an implementation:
public interface MyInterface<T> {
void foo(T param);
}
public class MyImplementation<T> implements MyInterface<T> {
void foo(T param) {
}
}
These two types are frework types. In the next step I want allow users to extend that interface as well as redeclare foo(T param)
to maybe equip it with further annotations.
public interface MyExtendedInterface extends MyInterface<Bar> {
@Override
void foo(Bar param);
// Further declared methods
}
I create an AOP proxy for the extended interface and intercept especially the calls to furtherly declared methods. As foo(…)
is no redeclared in MyExtendedInterface
I cannot execute it by simply invoking MethodInvocation.proceed()
as the instance of MyImplementation
only implements MyInterface.foo(…)
and not MyExtendedInterface.foo(…)
.
So is there a way to get access to the method that declared a method initially? Regarding this example is there a way to find out that foo(Bar param)
was declared in MyInterface
originally and get access to the accoriding Method
instance?
I already tried to scan base class methods to match by name and parameter types but that doesn't work out as generics pop in and MyImplementation.getMethod("foo", Bar.class)
obviously throws a NoSuchMethodException
. I already know that MyExtendedInterface
types MyInterface
to Bar
. So If I could create some kind of "typed view" on MyImplementation
my math algorithm could work out actually.
© Stack Overflow or respective owner