«Модуль» функциональности в Java? - PullRequest
1 голос
/ 18 октября 2011

В Vb.net у нас есть нечто, называемое «Модуль», обеспечивающее глобальную область действия , благодаря которой статические функции в модуле видимы во всем проекте.

Есть ли такая функциональность в Java? (то есть добавление статических методов, которые доступны для нескольких пакетов / файлов / классов без необходимости import. * )

Хорошо, я знаю, что это функциональность, которая вызовет много споров, но на самом деле смысл этой темы не в том, чтобы обсуждать эту функцию.

Ответы [ 5 ]

2 голосов
/ 18 октября 2011

В буквальном смысле, нет, в Java нет настоящего "глобального". Но вам не нужно импортировать, особенно не import .*.

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

package org.example.pkg.foo;
public class Foo {
    public static void doSomething();
}

package org.example.pkg.bar;
public class Bar {
    public void bar() {
        org.example.pkg.foo.Foo.doSomething();
    }
}

В Java типы, такие как классы и интерфейсы, определяются в терминах ClassLoader, который их загружал. Вы можете иметь несколько загрузчиков классов, что подразумевает возможность загрузки нескольких копий одного и того же класса. Очевидным расширением этого является то, что можно загрузить несколько классов с одним и тем же квалифицированным именем (package + class), и нет никакого врожденного требования, что они связаны.

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

Как это связано с вопросом? Что ж, без точного определения класса, на который вы хотите сослаться, невозможно точно определить метод или элемент, на который вы хотите сослаться. Это делает импорт или ссылка на FQN.

1 голос
/ 18 октября 2011

Нет. Импорт необходим для того, чтобы любой статический метод был виден (что хорошо).

Как уже упоминалось, Java IDE делают эту работу за нас.

1 голос
/ 18 октября 2011

Не без import.Вы можете объявить public static методы, доступные из любого места в проекте, но вам все равно придется либо импортировать класс, либо использовать полный путь к классу при его использовании.

1 голос
/ 18 октября 2011

публичные методы видны во всем проекте

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

my.package.UtilClass.methodIWannaCall(someArg);
1 голос
/ 18 октября 2011

Нет, не думай так.Статический импорт может сделать использование таких методов менее болезненным / многословным, но обычно рекомендуется быть осторожным с ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...