Как получить название класса вызова в Java?

Проблема с 'goto' и самым важным аргументом 'goto-меньшего-количества программирования' перемещение, который, если Вы используете его слишком часто Ваш код, хотя это могло бы вести себя правильно, становится нечитабельным, неудобным в сопровождении, непоправимый и т.д. В 99,99% случаев 'goto' приводит к запутанному коду. Лично, я не могу думать ни о каком серьезном основании относительно того, почему я использовал бы 'goto'.

20
задан R. Martinho Fernandes 8 November 2009 в 14:53
поделиться

4 ответа

Возможно, для вашего варианта использования имеет смысл передать класс вызывающего объекта в метод, например:

public class A { public void foo(Class<?> c) { ... } }

И назвать его примерно так:

public class B { new A().foo(getClass() /* or: B.class */ ); }
14
ответ дан 29 November 2019 в 22:47
поделиться

Самый простой способ заключается в следующем:

String className = new Exception().getStackTrace()[1].getClassName();

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

Изменить : вы прокомментировали следующее:

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

Затем я настоятельно рекомендую поискать существующую библиотеку ORM , такую ​​как Hibernate , iBatis или любая реализация JPA на ваш вкус.

34
ответ дан 29 November 2019 в 22:47
поделиться
1
ответ дан 29 November 2019 в 22:47
поделиться

foo () является закрытым, поэтому вызывающий всегда будет в классе A.

3
ответ дан 29 November 2019 в 22:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: