You can cast a null to the type and then invoke the method on that (which will work, since the target object isn’t involved in invocation of static methods).
((net.foo.X) null).doSomething();
This has the benefits of
- being side-effect free (a problem with instantiating
net.foo.X), - not requiring renaming of anything (so you can give the method in
Bthe name you want it to have; that’s why aimport staticwon’t work in your exact case), - not requiring the introduction of delegate class (though that might be a good idea…), and
- not requiring the overhead or complexity of working with the reflection API.
The downside is that this code is really horrible! For me, it generates a warning, and that’s a good thing in general. But since it’s working around a problem that is otherwise thoroughly impractical, adding a
@SuppressWarnings("static-access")
at an appropriate (minimal!) enclosing point will shut the compiler up.