Неклассовые функции в Java - PullRequest
0 голосов
/ 27 июня 2011

Я в основном программист на C / C ++ / target-C, в настоящее время работаю на Java над приложением для Android. У меня простой вопрос: я хочу использовать служебную функцию, желательно не связанную с каким-либо классом, который я могу вызвать из любого места в моем проекте (#include какого-либо вида необходимого?).

Я знаю, что могу сделать публичную статическую функцию класса и вызвать ее как Class.someFunction();. Я хотел бы просто иметь someFunction(); Я не уверен, возможно ли это в Java, или какой у него синтаксис.

Ответы [ 4 ]

14 голосов
/ 27 июня 2011

Вы можете добиться того же «эффекта», используя статический импорт, добавив следующий импорт в каждый файл, в котором вы хотите его использовать:

import static x.y.Class.someFunction;  // or x.y.Class.*;

...

// some code somewhere in the same file
someFunction();

Однако все методы в Java должны быть частью класса. Статический импорт просто позволяет вам (кратко) притвориться иначе.

P.S. Это также работает для статических полей.

3 голосов
/ 27 июня 2011

Вы можете использовать статический импорт :

import static com.example.MyUtilityClass.*; // makes all class methods available
// or
import static com.example.MyUtilityClass.myMethod; // makes specified method available

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

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

1 голос
/ 28 июня 2011

Кроме того, следуя рекомендациям по программированию, вы должны определить все такие распространенные, часто используемые функции в некотором служебном классе, где вы можете определить свои функции или поля (вероятно, константы, то есть статические и конечные атрибуты), которые будут использоваться / вызывается в разных местах API.

Хотя вам все еще нужно импортировать класс Utility. Еще определите такую ​​функциональность в самом верхнем родительском классе в вашей структуре иерархии API, так что вам даже не придется импортировать класс.

Надеюсь, это поможет. спасибо .... !!!

0 голосов
/ 27 июня 2011

Да, импорт статический ..

Например:

import static java.lang.Math.max; // Allowing to use max method anywhere in the source
class SomeClass { 
    int m = max( 1, 2 );// m now is 2 due t Math.max( int, int ) 
}
...