有没有办法将包私有类传递给静态方法

时间:2012-08-12 04:25:37

标签: java package static-methods package-private

我想知道是否有办法从另一个包中调用静态方法,该方法将包私有类作为参数?是将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;
        }
    }

2 个答案:

答案 0 :(得分:1)

这就是接口的用途。

您有一个公共接口(所有接口都是公共接口),它定义了所有需要公开访问的方法和一个包私有实现。传递对象的方法只需要知道接口。

在你的情况下你会有这样的事情:

public interface Message {
  public String getMessage();
}

然后

class MessagePackagePrivate implements Message {
   ...
}

最后:

public static void printString( Message message , int numbers) {
   ...
}

答案 1 :(得分:0)

您可以实现一个接口(比如Printable)并在静态方法中将该接口用作参数类型。