Могу ли я вызвать статический метод другого класса без использования имени класса? - PullRequest
0 голосов
/ 29 апреля 2018

Можно ли вызвать метод static другого класса, не используя имя класса (в том же пакете)? Есть похожие вопросы, но все ответы там используют имена классов.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

Да, можно вызывать статический метод класса, не используя ссылку на класс, используя статический импорт.

например:

import static java.lang.Math.*;

public class compute{
    public double getSqrt(double n){
       return sqrt(n)
    }
}

Предпочтительно использовать этот способ, если во многих местах в классе используются статические методы.

0 голосов
/ 29 апреля 2018

Это возможно при использовании статического импорта, однако я хотел бы предостеречь вас от их использования. Статический импорт запутывает, где находится код, что затрудняет понимание структуры кода. В сочетании с * импортом люди больше не могут определять (не тратя много времени) источник метода, хотя IDE могут.

Пример того, почему это может быть плохо: допустим, вы хотите увидеть, как была решена проблема в проекте с открытым исходным кодом, чтобы получить идеи для вашего собственного проекта. И знаешь, что? Вы можете просмотреть код в формате HTML онлайн. Все идет отлично! Вы просматриваете Java-файл, который хотите увидеть. Тогда есть этот своеобразный метод "Фу". Таким образом, вы ищете на странице "foo", и там точно 1 совпадение (то, которое вы просматриваете) Вверху есть несколько строк статического импорта blabla. *, Так что это тупик. Вы скачиваете источник. Затем вы выполняете полнотекстовый поиск по всему проекту для «foo (» => 5000 совпадений в 931 файле. В этот момент у вас больше нет выбора, кроме загрузки проекта в IDE, если вы хотите получить код. не нужно было бы делать ничего из этого, если бы автор четко дал понять, где метод живет с самого начала. Теперь, если вы не используете * import, то поиск класса - это двухэтапный процесс, так что это не так плохо. Лично я вообще не использую статический импорт. С короткими, но значимыми именами, я считаю, что явный тип предпочтительнее.

Мне не нравится статический импорт, потому что он нарушает ОО (ну, не технически, просто концептуально). Но это личное мнение, и подавляющее большинство не согласны со мной. Так что не стесняйтесь создавать свои собственные. В следующем посте обсуждается, когда (не) использовать статический импорт: Что такое хороший вариант использования для статического импорта методов?

0 голосов
/ 29 апреля 2018

Да . Но , вам понадобится import. В частности , import static. Как,

import static com.package.OtherClass.someMethod;

Тогда вы можете позвонить someMethod(String) как

someMethod("Like that");
...