Есть ли способ передать закрытый класс пакета статическому методу

Мне интересно, есть ли способ вызвать статический метод из другого пакета, который принимает закрытый класс пакета в качестве параметра? это единственный способ переместить класс 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 ответа

Для этого и нужны интерфейсы.

У вас есть общедоступный интерфейс (ну, все интерфейсы общедоступны), который определяет все методы, которые должны быть общедоступными, и частную реализацию пакета. И метод, которому вы передаете объект, должен знать только об интерфейсе.

В вашем случае у вас будет что-то вроде этого:

public interface Message {
  public String getMessage();
}

А потом

class MessagePackagePrivate implements Message {
   ...
}

В заключение:

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

Вы можете реализовать интерфейс (скажем, Printable) и используйте этот интерфейс в качестве типа параметра в вашем статическом методе.

Другие вопросы по тегам