Question

I want to import these two classes, both named Query - one a JDO class, the other a JPA class, to use in different methods in the same class.

import javax.jdo.Query;
import javax.persistence.Query;

Is there a way to globally import both of them at the same time at the top of the file?

Was it helpful?

Solution

I'm afraid, no. But you don't have to import class to use it: just reference one of the classes by its full name, like

javax.jdo.Query query = getJDOQuery();
query.doSomething();

Then you can import another without name collisions.

BTW, sometimes if you start getting lots of such name such collisions in your class, it's a subtle hint for refactoring: splitting functionality of one big class between several small ones.

OTHER TIPS

The only purpose of an import statement is to establish a shorthand alias for a fully-qualified name. If you were allowed to imported both, you'd create an ambiguity that would require type inference to resolve, and make your code extremely difficult to read.

The existing answers are correct. I'd like to show you how class name conflicts can be handled in Kotlin (docs).

If there is a name clash, we can disambiguate by using as keyword to locally rename the clashing entity:

import javax.jdo.Query // Query is accessible
import javax.persistence.Query as jpaQuery // jpaQuery stands for 'javax.persistence.Query'

That's +1 reason why you should consider Kotlin for your next project.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top