Я ищу способ проверить с Java, что некоторый объект является экземпляром некоторого класса Groovy.Groovy Java cross compilation instanceof
Похоже, что это невозможно из-за процесса компиляции, включая генерацию заглушек класса Java, для каждого класса Groovy. Итак, instanceof с классом Groovy вернет false.
В окне «Часы» я могу проверить его.
ModelNode.class = {[email protected]}"class ModelNode"
component.getClass() = {[email protected]}"class ModelNode"
component instanceof ModelNode = false
Очевидно, что есть два разных класса. И Java видит сгенерированный. Итак, я ищу хороший способ проверить какой-либо объект на класс Groovy.
I'v попробовал метод reflexion и getSuperclass(), и похоже, что существуют два совершенно разных класса, полученных из одного и того же суперкласса.
component.getClass().getSuperclass() = {[email protected]}"class javax.swing.tree.DefaultMutableTreeNode"
ModelNode.class.getSuperclass() = {[email protected]}"class javax.swing.tree.DefaultMutableTreeNode"
Кроме того я не могу бросить ничего после InstanceOf, в связи с тем же причинам. Итак, я должен делать что-л. неправильно.
Есть ли способ использования объектов Groovy в Java. Без интерфейса Java-интерфейса для ech, необходимого из java-кода.
P.S. Последнее предложение касается такого решения.
В Java
interface A {
foo();
}
assert(object instanceof B) // false;
((A)object).foo(); // fail
assert(object instanceof A) // true;
((A)object).foo(); // nice
В Groovy
class B extends SMTH implements A { ... }
На второй мысли, вы используете затмение? – Will
@ Без имени: Я использую IntelliJ IDEA CE 12.1.4, с groovy 2.1.3 и 1.6 JDK. MacBook. – Seagull