我想知道是否有办法从另一个包中调用静态方法,该方法将包私有类作为参数?是将MessagePackagePrivate类移动到另一个.java文件并将其公开的唯一方法吗?如果我不这样做,它会出现此错误:“MessagePackagePrivate类型不可见”这是正常的。
因此,如果是这种情况意味着,即使您的类公开了一个公开使用的静态方法,如果没有在同一个包中调用该类,也不能使用该类?
这是代码段:
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;
}
}
答案 0 :(得分:1)
这就是接口的用途。
您有一个公共接口(所有接口都是公共接口),它定义了所有需要公开访问的方法和一个包私有实现。传递对象的方法只需要知道接口。
在你的情况下你会有这样的事情:
public interface Message {
public String getMessage();
}
然后
class MessagePackagePrivate implements Message {
...
}
最后:
public static void printString( Message message , int numbers) {
...
}
答案 1 :(得分:0)
您可以实现一个接口(比如Printable
)并在静态方法中将该接口用作参数类型。