Как получить доступ к вложенным статическим классам с помощью Rjb? - PullRequest
1 голос
/ 11 января 2012

Допустим, Java-программа определяет класс A, который имеет вложенный статический класс 'B'.

Как получить доступ к классу B с помощью Ruby-Java Bridge?

Например, эти попытки не работают:

A = Rjb::import('package.A')
A.B 
A::B

Есть ли способ сделать это?

1 Ответ

2 голосов
/ 11 января 2012

Google кешировал этот результат с 2006 года. Звучит разумно, но возьмите его и поэкспериментируйте!

(PS: я пользователь java + ruby, но никогда не использовал Rjb, поэтому просто передаю информацию ...)

http://webcache.googleusercontent.com/search?q=cache:1p7OdptgsYUJ:blog.voneicken.com/2006/12/3/accessing-inner-java-classes-via-rjb+inner+class+rjb+ruby+java&cd=10&hl=en&ct=clnk&gl=au

Я не удержался от исследования проблемы, с которой сталкивался Лес при доступе к статическим внутренностям, и я думаю, что нашел синтаксис. Доступ к внутренним классам (статическим или нет) может показаться немного странным, но это выполнимо. Статики загружаются как любой другой класс, но их путь к файлу - «OuterClass $ StaticInnerClass». Нестатические внутренние классы немного сложнее. Импортируйте как статический, с помощью OuterClass $ Inner; теперь у вас есть внутренний класс, но хитрость заключается в создании экземпляра экземпляра: вы должны предоставить экземпляр OuterClass в качестве первого аргумента для конструктора (таким образом, раскрывая немного за кулисами java неявный доступ к внутренним элементам к его внешним методам и данные):

Outer = Rjb::import(‘Outer’)
Inner = Rjb::import(‘Outer$Inner’)
StaticInner = Rjb::import(‘Outer$StaticInner’)

outer = Outer.new
inner = Inner.new(outer)
staticInner = StaticInner.new
...