Есть ли Java-эквивалент if __FILE__ == $ 0? - PullRequest
0 голосов
/ 18 апреля 2011

Я знаю, что в Python и Ruby есть фрагменты if __name__ == '__main__': и if __FILE__ == $0, которые запускались бы только в том случае, если скрипт был открыт напрямую.

Это похоже на действительно полезную функцию, которую я не видел в Java ("официальный" язык программирования моей школы).Есть ли эквивалент в Java?Если нет, то есть ли способ реализовать это?

Ответы [ 3 ]

5 голосов
/ 18 апреля 2011

Java имеет метод public static void main(String[] args).это вызывается, когда класс запускается как основной класс из командной строки, и обычно only вызывается в таком сценарии (вы можете вызвать его напрямую, но обычно это не имеет смысла).поэтому в java стандартом является использование логики "основного вызова" в этом методе.

5 голосов
/ 18 апреля 2011

Добавить к ответ jthalborn :

Реальный вопрос не в том, "как мне это сделать на Java?" это "зачем Ruby и Python нужен такой кладж?"

Ответ заключается в том, что Ruby и Python ожидают выполнения файла от начала до конца при загрузке файла (либо в виде библиотеки, либо в качестве основной программы), поэтому вам нужен взлом, чтобы сказать «не запускайте эту часть» если меня называют библиотекой ". Java не ожидает запуска файла или класса от начала до конца. Он имеет main() в определенном классе, который содержит код, когда этот класс используется в качестве основной программы. Поэтому Java не нуждается в этом хаке.

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

0 голосов
/ 18 апреля 2011

Получите трассировку стека и взгляните на первый метод:

Throwable t = new Throwable();
StackTraceElement[] elems = t.getStackTrace();
... elems[elems.length-1] should contain a main method ... check if it is yours :) ...
...