Полностью определенное имя класса в Jython - PullRequest
0 голосов
/ 01 сентября 2011

Предположим, что some.module.MyClass является классом Java, если он импортирован в Jython 2.1, его полное имя класса можно получить так:

from some.module import MyClass
print MyClass.__name__

затем был напечатан файл some.module.MyClass.

Теперь тот же код в Jython 2.5 печатает только «MyClass».

Чтобы получить полное имя в Jython 2.5, я нашел следующее:

print MyClass.name

Он печатает «some.module.MyClass» (я думаю, java.lang.Class.getName () вызывается).

Проблема в том, что в MyClass есть метод getName. Тогда вышеупомянутое не удается.

Я нашел решение позвонить

print MyClass.__module__ + "." + MyClass.__name__

но это намного более многословно.

Если кто-нибудь знает более простой способ (например, оригинальное __name__), это будет приветствоваться.

Примечание: Я уже знаю полное имя класса (фактически я его импортировал). Я хочу, чтобы таким образом обнаруживались изменения в случае, если класс был переименован или перемещен. Например:

className = "some.module.MyClass"   # needs to be changed manually if MyClass is moved

против

className = MyClass.name   # no need to be changed if MyClass is moved

1 Ответ

0 голосов
/ 02 сентября 2011

работают следующие работы:

print MyClass.canonicalName

Будет выведено «some.module.MyClass», как и ожидалось.

В этом случае java.lang.Class.getCanonicalName вызывается.

Менее вероятно, что у произвольного класса будет метод getCanonicalName (), чем у getName (), поэтому в принципе он более надежен, чем

print MyClass.name

Тем не менее, чистый Jython простой способ (если он существует) также будет оценен.

...