Получение имени вызова, используемого в Java - PullRequest
2 голосов
/ 05 апреля 2009

Я пытаюсь найти общий способ репликации этой функциональности C:

int main(int argc, char** argv){
    fprintf(2,"%s: error you did something wrong.\n", argv[0]);
    return 1;
}

в Java. До сих пор единственным способом было жестко закодировать это в приложение, что ужасно. Я хотел бы получить что-то похожее на:

someObj.getClass().getSimpleName();

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

Возможно ли это вообще?

Редактировать

Мои поиски хорошего часа не помогли.

Дублированный вопрос, см. $ 0 (Название программы) в Java? Откройте для себя основной класс? для ответа

Ответы [ 4 ]

5 голосов
/ 05 апреля 2009
0 голосов
/ 05 апреля 2009

Я не думаю, что это возможно. Самый простой способ напечатать это - использовать MyClass.class.getSimpleName (), или вы можете создать (не бросать) Throwable, распечатать трассировку стека и перейти оттуда.

0 голосов
/ 05 апреля 2009

Единственное, о чем я могу думать, это то, что вы определяете, какой поток является основным потоком, получаете трассировку стека этого потока, а затем возвращаетесь к вершине стека и запрашивает имя класса и имя метода элемента для посмотрите, хотите ли вы этого.

Это довольно странно, хотя. Я бы пересмотрел первоначальное требование и посмотрел, нет ли более простых средств достижения того, чего вы хотите.

0 голосов
/ 05 апреля 2009

Способ, которым java находит класс для запуска static void main(), - по имени, передаваемому в исполняемый файл java (и путь к классу). Поэтому невозможно выполнить основной прогон, если не было передано правильное имя.

* Ну, если только основное найденное не вызывает что-то вроде "FooBar.main ()" или не использует загрузчик классов для его поиска.

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

Так что ошибки никогда не бывает, и поэтому никогда не нужно искать имя.

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