I'm wondering if there is a way to call static method from another package which take a package private class as a parameter? is that the only way to move MessagePackagePrivate class to another .java file and make it public ? it gives this error if i don't do that : "The type MessagePackagePrivate is not visible" which is normal.
So if it is the case that means, even if your class expose a static method to be used publicly ,that class cannot be used if it is not being called in the same package?
here is the code snippet:
MainClass.java
package packageA;
import packageB.*;
public class MainClass {
public static void main(String[] args) {
ClassB.printString(new MessagePackagePrivate("Package problem"), 12);
}
}
ClassB.java
package packageB;
public class ClassB {
public static void printString( MessagePackagePrivate message , int numbers) {
System.out.println(message.getMessage() + " numbers: " + numbers );
// other logics will be implemented here ...
}
}
class MessagePackagePrivate {
private String text;
MessagePackagePrivate(String text) {
this.text = text;
}
public String getMessage() {
return this.text;
}
}
This is what interfaces are for.
You have a public interface (well, all interfaces are public) that defines all the methods that need to be publicly accessible and a package private implementation. And the method you pass the object to only needs to know about the interface.
In your case you'll have something like this:
And then
Finally: