Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Classes in same package

I love the Intellij IDEA but i have been stacked on one little problem with Java imports. So for example there is a package with name "example" and two different classes in it: A.java and B.java.

And i wanna get access to class "A" from class "B" without imports. Like this:

class A:

package example;

public class A{ ... some stuff here ...}

class B:

package example;

public class B{
    public static void main(String[] args){
        A myVar = new A();
    }
}

This code may not work, but it's doesn't matter. Trouble just with IDE and with its mechanism of importing classes.

So, problem is that i can't see A class from B. Idea says 'Cant resolve symbol' but i actually know that class A exists in package. Next strange is that complier works fine and there are no exceptions. Just IDEA can't see the class in the same package.

Does anybody has any ideas?

like image 971
nick.skriabin Avatar asked Apr 17 '12 15:04

nick.skriabin


People also ask

How do I use classes in the same package?

Classes and interfaces in the same package can use each other without prefixing their names with the package name. But to use a class or an interface from another package, you must use its fully qualified name, that is, packageName. anySubpackageName. ClassName .

Can a package have multiple classes?

No, while defining multiple classes in a single Java file you need to make sure that only one class among them is public. If you have more than one public classes a single file a compile-time error will be generated.

Can we have 2 classes with same name in a package?

Yes, you can have two classes with the same name in multiple packages. However, you can't import both classes in the same file using two import statements.

Do we need to import classes in same package?

Classes are imported between the different packages only when particular that need to be imported are marked as public and its member and methods should be of public so that they can be used outside its package.


2 Answers

If they are in the same package, you can access A in class B without import:

package example;

public class B{
    public static void main(String[] args){
        A myA = new A();
    }
}
like image 168
talnicolas Avatar answered Sep 17 '22 11:09

talnicolas


Maybe this will help you, or somebody else using IntelliJ that is getting a "Cannot resolve symbol" error but can still compile their code.

Lets say you have the two files that buymypies wrote up, the standard Java convention is that the two files would exist in an Example directory in your source code area, like /myprojectpath/src/Example. But it is technically not a requirement to reflect the package structure in the source directory structure, just a best practice sort of thing.

So, if you don't mimic the package structure, and the two files are just in /myprojectpath/src, IntelliJ will give you the "Cannot resolve symbol" error because it expects the source code structure to reflect the package structure, but it will compile okay.

I'm not sure if this is your problem, but I do use IntelliJ and have seen this, so it's something to look at.

like image 33
tpow Avatar answered Sep 18 '22 11:09

tpow